国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

.NET中一些常見代碼的性能問題

2024-07-10 12:54:55
字體:
來源:轉載
供稿:網友
  • 網站運營seo文章大全
  • 提供全面的站長運營經驗及seo技術!
  • 1、stringbuilder和string(差別很大)

       string s = "";
       long t1 = system.datetime.now.ticks;
       for(int i=0;i<10000;i++)s += convert.tostring(i);
       long t2 = system.datetime.now.ticks;

       long t3 = system.datetime.now.ticks;
       system.text.stringbuilder sb = new system.text.stringbuilder();
       for(int i=0;i<10000;i++)sb.append(convert.tostring(i));
       string s1 = sb.tostring();
       long t4 = system.datetime.now.ticks;

       long t5 = system.datetime.now.ticks;
       system.text.stringbuilder sb1 = new system.text.stringbuilder(5000);
       for(int i=0;i<10000;i++)sb1.append(i);
       string s2 = sb1.tostring();
       long t6 = system.datetime.now.ticks;

       long t7 = system.datetime.now.ticks;
       system.text.stringbuilder sb2 = new system.text.stringbuilder(10000);
       for(int i=0;i<10000;i++)sb2.append(i);
       string s3 = sb2.tostring();
       long t8 = system.datetime.now.ticks;

       listviewitem item1 = result.items.add("使用string類,利用operator +進行操作");
       item1.subitems.add(convert.tostring((t2-t1)/10000));

       listviewitem item2 = result.items.add("使用stringbuilder類,不對初始大小賦值");
       item2.subitems.add(convert.tostring((t4-t3)/10000));

       listviewitem item3 = result.items.add("使用stringbuilder類,對初始大小賦值為申請數量的1/2");
       item3.subitems.add(convert.tostring((t6-t5)/10000));

       listviewitem item4 = result.items.add("使用stringbuilder類,對初始大小賦值為申請數量");
       item4.subitems.add(convert.tostring((t8-t7)/10000));

      2、異常對性能的影響,當然,下面這個例子沒有進行異常的分發、捕獲等,所以時間不長。

       int j = 0;
       long t1 = system.datetime.now.ticks;
       for(int i = 0; i < 10000; i++)
       {
        try
        {  
         j = i;
         throw new system.exception();
        }
        catch {}
       } 
       long t2 = system.datetime.now.ticks;

       long t3 = system.datetime.now.ticks;
       for(int i = 0; i < 10000; i++)
       {
        try
        {  
         j = i;
         //throw new system.exception();
        }
        catch {}
       } 
       long t4 = system.datetime.now.ticks;

       result.items.clear();
       listviewitem item1 = result.items.add("拋出10000個異常");
       item1.subitems.add(convert.tostring((t2-t1)/10000));
       listviewitem item2 = result.items.add("屏蔽異常");
       item2.subitems.add(convert.tostring((t4-t3)/10000));

      3、使用foreach循環與使用for循環(差別較大)

       string s = "monkeys!";
       int dummy = 0;

       system.text.stringbuilder sb = new system.text.stringbuilder(s);
       for(int i = 0; i < 1000000; i++)sb.append(s);
       s = sb.tostring();

       long t1 = system.datetime.now.ticks;
       foreach (char c in s) dummy++;
       long t2 = system.datetime.now.ticks;

       dummy = 0;
       long t3 = system.datetime.now.ticks;
       for (int i = 0; i < 1000000; i++)dummy++;
       long t4 = system.datetime.now.ticks;

       result.items.clear();
       listviewitem item1 = result.items.add("使用foreach循環");
       item1.subitems.add(convert.tostring((t2-t1)/10000));
       listviewitem item2 = result.items.add("使用for循環");
       item2.subitems.add(convert.tostring((t4-t3)/10000));

      4、latebinding和directcall的比較(差別也比較大)

       long t1 = system.datetime.now.ticks;
       latebindingtest lbt = new latebindingtest();

       for(int i=0;i<100000;i++)
       {
        string s = lbt.getsomewhat();
       }
       long t2 = system.datetime.now.ticks;

       long t3 = system.datetime.now.ticks;
       type t = type.gettype("perfdemo.latebindingtest");
       methodinfo mi = t.getmethod("getsomewhat");  

       for(int i=0;i<100000;i++)
       {
        object s2 = mi.invoke(lbt,null);
       }
       long t4 = system.datetime.now.ticks;

       result.items.clear();
       listviewitem item1 = result.items.add("直接調用class的方法(微秒)");
       item1.subitems.add(convert.tostring((t2-t1)/10));
       listviewitem item2 = result.items.add("采用遲綁定的方式class的方法(微秒)");
       item2.subitems.add(convert.tostring((t4-t3)/10));

      5、這是上面例子中使用的class定義:

     public class latebindingtest
     {
      public string getsomewhat()
      {
       return "hello,fqq!";
      }
     }

      6、大家可以結合taskmgr和performancemonitor來進行監視,結論還是比較有意思的

    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 呼图壁县| 临安市| 吴江市| 绥宁县| 安福县| 边坝县| 高淳县| 高青县| 丰原市| 安徽省| 孝昌县| 台山市| 宜阳县| 安福县| 秦皇岛市| 衡阳县| 济源市| 大庆市| 南汇区| 和林格尔县| 泸西县| 安福县| 伊通| 南靖县| 商南县| 额尔古纳市| 烟台市| 进贤县| 彭山县| 大理市| 手游| 平利县| 昭觉县| 琼结县| 临泽县| 鄂州市| 永平县| 清涧县| 肃北| 宣化县| 绍兴市|