Stopwatch sw1 = new Stopwatch();
                      sw1.Start();
                      for (int i = 0; i < 100000000; i++) {
                          string result1 = ((Convert.ToString(null) ?? "123"));
                      }
                  
                     sw1.Stop();
                     this.label1.Text = sw1.Elapsed.ToString();

          1.引入命名空間     using System.Diagnostics;

          2. // 開始計(jì)時(shí)
              Stopwatch watch = new Stopwatch();
             watch.Start();

               // -----你的代碼-----
              // 停止計(jì)時(shí)
              watch.Stop();
             Console.WriteLine(watch.Elapsed);

          軟件的運(yùn)行速度必須要在用戶可以接受的范圍內(nèi)。通常,改善那些短暫的但頻繁使用的例程的速度會(huì)大幅度地提高軟件的整體速度。
          要改善速度,當(dāng)然首先要能夠量度時(shí)間。好,那我們考慮一下在跑道上的情況,槍聲一響,馬上按下秒表開始計(jì)時(shí),
          在選手到達(dá)終點(diǎn)那一刻結(jié)束計(jì)時(shí),這時(shí)就可以知道該選手所用的時(shí)間了。要開始對(duì)下一輪比賽計(jì)時(shí)前,要先將秒表歸零。
          .NET2.0也提供了這樣一個(gè)秒表:Stopwatch類,它可以比較精確地測(cè)量時(shí)間。
          速度測(cè)試:
          軟件的性能和可測(cè)性是一個(gè)復(fù)雜的主題。要確保應(yīng)用程序能夠滿足用戶的期望,就需要在開發(fā)周期內(nèi)考慮它的性能和可測(cè)性。
          這在設(shè)計(jì)階段至關(guān)重要,一個(gè)糟糕的設(shè)計(jì)幾乎肯定會(huì)導(dǎo)致糟糕的用戶體驗(yàn)。然而,僅僅有好的設(shè)計(jì)也不能保證程序能夠高效地運(yùn)行,最終代碼的質(zhì)量同樣重要。
          量度一個(gè)運(yùn)行時(shí)間較長(zhǎng)的例程相當(dāng)簡(jiǎn)單。如果一個(gè)過(guò)程會(huì)持續(xù)幾分鐘,只要一塊腕表就可以記錄它的時(shí)間了。
          比如一個(gè)執(zhí)行時(shí)間為兩分鐘的過(guò)程,10%的改善能夠節(jié)省12秒,這是很容易去確定的。
          而如果要測(cè)量一個(gè)非常短暫的過(guò)程,就要考慮更好的精確性了。比如有一些很小的例程,它們的運(yùn)行時(shí)間可能只有千分之一秒,
          但會(huì)被調(diào)用100萬(wàn)次,這樣的累積效果就明顯了。在.NET framework的先前版本中,需要使用Windows API函數(shù),
          而在.NET framework 2.0中,微軟引入了Stopwatch(它就是我們的秒表)類來(lái)簡(jiǎn)化時(shí)間的量度任務(wù)。
          Stopwatch類:
          使用Stopwatch類來(lái)量度時(shí)間非常簡(jiǎn)單。跟現(xiàn)實(shí)生活中的秒表一樣,這個(gè)類的對(duì)象也能夠?qū)τ?jì)數(shù)器進(jìn)行開始、停止、歸零(重置)操作,
          不過(guò)它可比一般的秒表精確多了,它能夠精確到微秒(也就是百萬(wàn)分之一秒)。
          示例代碼:
          要演示Stopwatch的使用還是來(lái)段代碼吧。下面是一個(gè)控制臺(tái)應(yīng)用程序,它將1到100萬(wàn)之間的所有整數(shù)累加:


          using System;

          namespace StopWatchClass
          {
          class Program
          {
          static void Main(string[] args)
          {

          long total = 0;

          for (int i = 1; i <= 10000000; i++)
          {
          total
          += i;
          }
          }
          }
          }


          添加Stopwatch對(duì)象:
          Stopwatch類位于System.Diagnostics命名空間。下面是添加對(duì)象后的代碼:

          using System;
          using System.Diagnostics;

          namespace StopWatchClass
          {
          class Program
          {
          static void Main(string[] args)
          {
          Stopwatch timer
          = new Stopwatch();
          long total = 0;

          for (int i = 1; i <= 10000000; i++)
          {
          total
          += i;
          }
          }
          }
          }


          控制Stopwatch對(duì)象:
          Stopwatch提供了幾個(gè)方法用以控制Stopwatch對(duì)象。Start方法開始一個(gè)計(jì)時(shí)操作,Stop方法停止計(jì)時(shí)。
          此時(shí)如果第二次使用 Start方法,將繼續(xù)計(jì)時(shí),最終的計(jì)時(shí)結(jié)果為兩次計(jì)時(shí)的累加。為避免這種情況,
          在第二次計(jì)時(shí)前用Reset方法將對(duì)象歸零。這三個(gè)方法都不需要參數(shù)。代碼是:

          using System;
          using System.Diagnostics;

          namespace StopWatchClass
          {
          class Program
          {
          static void Main(string[] args)
          {
          Stopwatch timer
          = new Stopwatch();
          long total = 0;

          timer.Start();
          for (int i = 1; i <= 10000000; i++)
          {
          total
          += i;
          }

          timer.Stop();

          }
          }
          }


          讀取Stopwatch結(jié)果:
          在結(jié)束計(jì)時(shí)后下一步就是讀取計(jì)時(shí)結(jié)果了。Stopwatch類提供了以下屬性:

          • Elapsed:返回一個(gè)TimeSpan對(duì)象,表示計(jì)時(shí)時(shí)間間隔;
          • ElapsedMilliseconds:返回計(jì)時(shí)經(jīng)過(guò)的微秒數(shù),精確度稍差,適合于稍長(zhǎng)一點(diǎn)的計(jì)時(shí);
          • ElapsedTicks: 返回計(jì)時(shí)經(jīng)過(guò)的計(jì)時(shí)器刻度(timer tick)數(shù)。計(jì)時(shí)器刻度是Stopwatch對(duì)象可能的最小量度單位。
          • 計(jì)時(shí)器刻度時(shí)間的長(zhǎng)度由特定的計(jì)算機(jī)和操作系統(tǒng)確定。Stopwatch對(duì)象的 Frequency靜態(tài)字段的值表示一秒所包含的計(jì)時(shí)器刻度數(shù)
          • 。注意它與TimeSpan的Ticks屬性所用的時(shí)間單位的區(qū)別。

          應(yīng)當(dāng)根據(jù)計(jì)時(shí)任務(wù)的情況選擇其中的一個(gè)屬性。在我們的示例程序中,Elapsed屬性提供了需要的精確度,用它來(lái)輸出經(jīng)過(guò)的微秒數(shù)
          。這也是TimeSpan的最高精確度了。
          下面是最終的程序代碼:


          using System;
          using System.Diagnostics;

          namespace StopWatchClass
          {
          class Program
          {
          static void Main(string[] args)
          {
          Stopwatch timer
          = new Stopwatch();
          long total = 0;

          timer.Start();
          for (int i = 1; i <= 10000000; i++)
          {
          total
          += i;
          }

          timer.Stop();

          decimal micro = timer.Elapsed.Ticks / 10m;
          Console.WriteLine(
          "Execution time was {0:F1} microseconds.", micro);
          }
          }
          }


          另外,使用IsRunning屬性可以查看一個(gè)Stopwatch實(shí)例是否正在計(jì)時(shí),使用StartNew方法可以開始一個(gè)新的計(jì)時(shí)器。


          posted on 2011-12-19 13:25 sanmao 閱讀(2545) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          常用鏈接

          留言簿(5)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 老河口市| 深水埗区| 简阳市| 镇宁| 合肥市| 上思县| 汉中市| 康乐县| 嵩明县| 砚山县| 河源市| 阳原县| 洪湖市| 古浪县| 方正县| 眉山市| 陇南市| 诸城市| 喜德县| 温宿县| 通化市| 温州市| 文登市| 东兴市| 荥经县| 乃东县| 禄丰县| 通江县| 濮阳县| 周宁县| 滁州市| 辽阳市| 晋城| 安宁市| 蒙阴县| 陆良县| 梅河口市| 五原县| 固始县| 睢宁县| 神农架林区|