zoukankan      html  css  js  c++  java
  • 代码性能不高

    因为所谓的代码性能不高而被离职的程序员

    笔者工作于成都青羊工业总部基地某公司,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)
            {
                string cacheKey = string.Format("{0}_SKURewriteData", this.CacheKeyPrefix);
                Hashtable htContainer = CacheHelper.GetTagGBL(cacheKey) as Hashtable;
                DataTable t = null;
                if (htContainer == null)
                {
                    htContainer = Hashtable.Synchronized(new Hashtable(1000));
                }
                if (htContainer[skuID_g] != null)
                {
                    t = htContainer[skuID_g] as DataTable;
                }
                if (t == null || 0 >= t.Rows.Count)
                {
                    if (oProductSKUs == null) oProductSKUs = new ProductSKUs(connectionStr);
                    t = oProductSKUs.GetSkuRewriteData(skuID_g);
                }
                if (t != null && !htContainer.Contains(skuID_g))
                {
                    htContainer.Add(skuID_g, t);
                }
                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());
                }
            }
    复制代码

    上面的代码是项目里面使用的,下面是详尽注释版.

    很多园友说注释太多了,其实项目代码里面没有这么多注释的,下面详细的注释是我写博文加上了,给大家阅读带来障碍,I'm sorry!

    复制代码
            /// <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());
                }
            }
    复制代码

    代码是非,任由后人评说吧!中秋将至,祝朋友们节日快乐。

    做此博文以铭记!另外成都求职的朋友需要注意,程序员有风险!

     

     

     

     

     

     

  • 相关阅读:
    windows下查看端口占用情况及关闭相应的进程
    python学习中的一些“坑”
    python 中一些关键字的区别
    linux下配置Tomcat开机启动
    windows 下的python 安装pycrypto
    'redis-server' 不是内部或外部命令,也不是可运行的程序或批处理文件
    怎么学习代码
    crx文件不能安装,提示无效的安装包
    回调函数
    koa-router的作用
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3329385.html
Copyright © 2011-2022 走看看