キャストのコスト


キャストもコストはあると言えばある。

1千万回ループ:98.0730942.73秒 内4ミリ秒以上:63
1千万回ループ:91.8401287.840秒 内4ミリ秒以上:61

気にしすぎるほどではないが頭の片隅に置いとくぐらい。

var mxdPath = @"C:\temp\TEST.mxd";

using (ComReleaser com = new ComReleaser())
{
  IMapDocument mapDoc = new MapDocumentClass();
  com.ManageLifetime(mapDoc);

  mapDoc.Open(mxdPath);

  var map = mapDoc.get_Map(0);
  com.ManageLifetime(map);

  mapDoc.Close();
  Stopwatch loopCounter = new Stopwatch();
  loopCounter.Start();
  int elpCount = 0;

  //特段なにもしない場合。

  Stopwatch spWatch = new Stopwatch();
  //ループ
  for (int i = 0; i < 10000000; i++)
  {
    spWatch.Reset();
    spWatch.Start();

    var ext = ((IActiveView)map).Extent;

    spWatch.Stop();
    if (spWatch.ElapsedMilliseconds > 4)
    {
      Console.WriteLine("{0}, {1} , {2}", i, spWatch.ElapsedMilliseconds, ext.Width);
      elpCount++;
    }
  }//end loop

  loopCounter.Stop();
  Console.WriteLine("1千万回ループ:{0}.{1}秒 内4ミリ秒以上:{2}", loopCounter.Elapsed.TotalSeconds, loopCounter.Elapsed.Milliseconds, elpCount);
  loopCounter.Reset();

  GC.Collect();
  GC.WaitForPendingFinalizers();
  GC.Collect();
  GC.WaitForFullGCComplete();

  loopCounter.Start();
  elpCount = 0;

  spWatch.Reset();
  spWatch.Start();
  IActiveView actView = ((IActiveView)map);

  //ループ
  for (int i = 0; i < 10000000; i++)
  {
    spWatch.Reset();
    spWatch.Start();

    var ext = actView.Extent;

    spWatch.Stop();
    if (spWatch.ElapsedMilliseconds > 4)
    {
      Console.WriteLine("{0}, {1} , {2}", i, spWatch.ElapsedMilliseconds, ext.Width);
      elpCount++;
    }
  }//end loop

  loopCounter.Stop();
  Console.WriteLine("1千万回ループ:{0}.{1}秒 内4ミリ秒以上:{2}", loopCounter.Elapsed.TotalSeconds, loopCounter.Elapsed.Milliseconds, elpCount);
  loopCounter.Reset();
}//end com
カテゴリー: 開発 タグ: パーマリンク