実現したいこと・背景
C#でパフォーマンスカウンターの各値を取得しようと思っています。
そこでPerformanceCounterクラスを使い、デバッグモードで動作を確認していたのですが、エラーやExceptionは発生しないものの、どのようにしても初回の取得に10秒近く時間がかかっており少々悩んでいました。
ただふと「ブレークポイントを除いても変わらないだろう」と思い全てのブレークポイントを消したところ、1秒もかからず終了することができました。
該当のソースコード
C#
1var time1 = Environment.TickCount; 2string value = String.Empty; 3 4for (int count = 0; count != 10; count++) 5 { 6 PerformanceCounter performanceCounter = new PerformanceCounter("Objects", "Processes"); //ここ 7 value += performanceCounter.RawValue.ToString() + ","; 8 } 9 10var time2 = Environment.TickCount; 11MessageBox.Show(value); 12MessageBox.Show((time2 - time1).ToString() + "ミリ秒"); 13 14return;
具体的には、始めは上記コードの「ここ」の部分にのみブレークポイントを置き、ステップオーバーで確認していたところ、
ブレークポイントの箇所を実行すると、制御が戻るようになるまで、初回の実行のみ10秒ほど時間がかかります。
2回目以降は1秒もかかりません。
ただ上記で説明したようにブレークポイントを消したところ合計10回のタイムが1秒かからずに返ってきました。
質問
このようにブレークポイントの有無で実行時間に大きな変動が生じることはよくあることなのでしょうか?
またもし、ステップオーバー時に時間がかかっている原因をご存知の方がいれば、ご助言いただけますと幸いです。
補足
・開発環境はWindows10のVS2017です。
・またローカルのパフォーマンスカウンターを取得しているので、ネットワーク遅延などは関係ないはずです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/20 02:28
2018/08/20 13:05
2018/08/24 04:56