実行時間を測定したいコードを含む通常のasp.netページがあります。この目的のために、非常に基本的なヘルパー クラスを作成しました。
public class Timing
{
private long m_ticksBefore;
private long m_ticksAfter;
public void Before()
{
m_ticksBefore = DateTime.Now.Ticks;
}
public void After()
{
m_ticksAfter = DateTime.Now.Ticks;
}
public void TraceTime(string note)
{
TimeSpan span = new TimeSpan(m_ticksAfter - m_ticksBefore);
System.Diagnostics.Trace.Write(string.Format("\n...Timing for {0}...\nTicks: \t{1}\nMilliseconds: \t{2}\nSeconds: \t{3}\n..................", note, span.Ticks, span.TotalMilliseconds, span.TotalSeconds));
}
}
新しい Timing オブジェクトをインスタンス化し、監視するコードを Before() メソッドと After メソッドでラップし、最後に TraceTime() メソッドを呼び出して結果を IDE の出力ウィンドウに出力します。
奇妙なことに、ページへの最初のリクエストでは約 40 ミリ秒のタイミング結果が予想されますが、ページを更新 (F5) すると実行時間は 0 ティックになります。監視対象領域内で別のコードの実行を強制する新しいパラメーターを使用してページを実行しても、フラット 0 が明らかになります。
代わりに System.Diagnostics.StopWatch を使用すると、より現実的な結果が得られます
Stopwatch watch1 = Stopwatch.StartNew();
//Some code to monitor
watch1.Stop();
System.Diagnostics.Trace.Write(watch1.ElapsedTicks);
私にはコードは非常に似ているように見え、最初のアプローチが現実的な結果を出力できない理由を見つけることができないようです...
舞台裏で実行されるある種の最適化の問題のようですが、実際にはわかりません。多分それは私の個人的なタイミングの問題、つまり就寝時間の問題によるものです...