笔者工作于成都青羊工业总部基地某公司,2013年6月16号,我不幸因为所谓的代码性能不高而被离职。此次被离职,即是意料之中,也是意料之外;意料之中是因为我又不是头一个,意料之外是他们的算盘打得精。当天早上来公司,大概早上10半左右,他们的技术经理找我谈话,说:“那天发生的事情你也晓得哈......,公司要个交待......”,说到这儿想必下文大伙也知道了。
此次被离职,代码性能不高只是一个导火索,而我就是点燃那导火索的那个人;在这家公司工作一年多点,期间因为工作的事情和上面的人有些技术见解及做法不同而闹得不开心,也许正是因为这样,他们参了我不少本,反而给你扣上一些帽子如:不听取别人的意见,固执等等。他们所做的web项目,对于后台拼接html代码情独有钟,谓之曰:这样性能高,当时听到这种理由,哥心里面就笑了;本想改善一下他们传统做法,还和总监据理力争,但笔者最后还是接爱了他们情独有钟的做法--慢慢拼呗......,期间还有些事情不一一例举了。
好了,先来看看他们所说的性能不高的代码吧!
/// <summary> /// 根据商品GUID获取重写后的URL地址 /// </summary> /// <param name="skuID_g">商品SkuID_g</param> /// <returns>返回商品页伪静态地址</returns> internal string GetSkuRewriteUrl(Guid skuID_g) { //本方法实现思路:Hashtable 里面存储的是DataTable,DataTable三列,字段名分别是:类别ID,卖家ID,商品ID //生成缓存键,CacheKeyPrefix是缓存前缀 string cacheKey = string.Format("{0}_SKURewriteData", this.CacheKeyPrefix); //从缓存里面取Hashtable容器,Hashtable里面存的正是每个skuID_g关联的记录 Hashtable htContainer = CacheHelper.GetTagGBL(cacheKey) as Hashtable; DataTable t = null; //如果Hashtable容器为null,实例化线程安全的Hashtable if (htContainer == null) { htContainer = Hashtable.Synchronized(new Hashtable(1000)); } //如果Hashtable容器里面有skuID_g这个key的Datable,直接取出 if (htContainer[skuID_g] != null) { t = htContainer[skuID_g] as DataTable; } // Hashtable容器里面没有skuID_g对应的DataTable,则从数据库里面取出 if (t == null || 0 >= t.Rows.Count) { if (oProductSKUs == null) oProductSKUs = new ProductSKUs(connectionStr); t = oProductSKUs.GetSkuRewriteData(skuID_g); } //DataTable不为null并且容器里面没有此DataTable,则添加到Hashtable if (t != null && !htContainer.Contains(skuID_g)) { htContainer.Add(skuID_g, t); } //写入缓存,这代码放到上面if判断里面更好,这可能是我写代码没有考虑周全的,以致于使访问量大了挂空档跑了很多次! //特别说明:这个方法是总监的框架里面带的,程序员只管调用。 CacheHelper.AddTagGBL(cacheKey, htContainer); if (t != null && t.Rows.Count > 0) { //yaocai-类别ID-卖家ID-商品ID.html return string.Format("{0}yaocai-{1}-{2}-{3}.html", Request.Url.Host, t.Rows[0]["类别ID"], t.Rows[0]["卖家ID"], t.Rows[0]["商品ID"]); } else { return string.Format("{0}product/details.aspx?sid={1}", Request.Url.Host, skuID_g.ToString()); } }
代码是非,任由后人评说吧!中秋将至,祝朋友们节日快乐。
做此博文以铭记!另外成都求职的朋友需要注意,程序员有风险!