私はスレッドを開始するためにThreadPoolを使用しています。内部のthreaadコードでは、実際に使用されている時間のうちに多くのCPU時間を把握しようとしています。私はProcessThreadがあると読んだ。このためのTotalProcessorTimeプロパティ(http://msdn.microsoft.com/en-us/library/system.diagnostics.processthread.totalprocessortime.aspx)が、私はそれを読むことができません。では、現在のスレッドでどうすればよいのですか?現在のスレッドのProcessThread.TotalProcessorTimeを取得する方法
答えて
数poiints:
1)ProcessThreadを経由して、正しいプロセスのスレッドを取得します。 TotalProcessorTimeはネイティブスレッドIDに必要です
2)管理されているスレッドID(Thread.CurrentThread.Name経由)とネイティブスレッドIDを比較して、システム内の現在のスレッドを取得しているようです.Diagnostics名前空間。管理スレッドID!= ProcessThreadIDを忘れないでください。あなたは)スレッドプールのスレッドを再利用することができGetCurrentThreadId機能にhttp://msdn.microsoft.com/en-us/library/ms683183(VS.85).aspx
3を使用する必要がありますので、あなたはそれがスレッドの使用をプロファイリングする場合は、スレッド・プールのTotalProcessorTimeは)あなたが
4を期待しているものよりも大きくすることができますVisual Studio Ultimate、または別の良いプロファイラ(ANTS、DotTrace、SciTech)のスレッドプロファイラを使用する方が簡単かもしれません。
はい、私は間違ったものを比較しているようです。 – ren
私は同じことを試みています...どのくらいのCPUが特定のスレッド消費する。次のコードでは、WorkHardが実行されている現在のスレッドを識別できます。 ただし、変数intitialTicksとfinalTicksは、関数を計算するのは難しいの前と後のcurrentProcessThread.TotalProcessorTime.Ticksを持って実行し、その差がゼロ
public void WorkHard()
{
long initialTicks, finalTicks, deltaTicks;
byte f;
bool threadFound;
ProcessThreadCollection currentProcessThreads;
ProcessThread currentProcessThread = null;
int m_currentThreadId = kernel32.GetCurrentThreadId();
while (m_keepWorking)
{
f = (byte)rnd.Next(31);
System.Threading.Thread.Sleep(f*25);
threadFound = false;
currentProcessThreads = Process.GetCurrentProcess().Threads;
foreach (ProcessThread t in currentProcessThreads)
{
if (t.Id == m_currentThreadId)
{
currentProcessThread = t;
threadFound = true;
break;
}
}
initialTicks = threadFound ? currentProcessThread.TotalProcessorTime.Ticks : 0;
fibonacci(f);
finalTicks = threadFound ? currentProcessThread.TotalProcessorTime.Ticks : 0;
deltaTicks = finalTicks - initialTicks;
lock (workerLogFile.BaseStream)
{
workerLogFile.WriteLine(string.Concat(m_minionName, " finished calculating fib(", f.ToString(), ") at ", DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss.ffff"), " on threadId[", m_currentThreadId.ToString(), "]. Process required ", finalTicks.ToString()," - ", initialTicks.ToString()," = ", deltaTicks.ToString(), " ticks"));
}
OnMinionDoneEvent(new minionEventArgs(String.Concat(m_minionName, ", on thread ", m_currentThreadId.ToString("000000"), ", done working on Fibonacci(", f.ToString(), ")"), finalTicks - initialTicks));
}
lock (workerLogFile.BaseStream)
{
workerLogFile.WriteLine(string.Concat(m_minionName, " called to rest at ", DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss.ffff"), " on threadId[", m_currentThreadId.ToString(), "]."));
}
- 1. Javaの現在のスレッドからThreadlocalの値を取得する方法は?
- 2. 現在地を取得する方法
- 3. 現在再生中のビデオファイルの現在のフレームを取得する方法は?
- 4. jqueryのテキストボックスの現在の値を取得する方法
- 5. WebApplicationContextを現在のサーブレットコンテキストの外部に取得する方法
- 6. MYSQL:マルチテーブルテーブルの現在のエントリを取得する方法
- 7. revelで現在のファイルの場所を取得する方法
- 8. asp.netで現在のユーザーの場所を取得する方法
- 9. ブラウザ拡張 - 現在のページのURLを取得する方法
- 10. 現在のレイアウトの名前を取得する方法は?
- 11. JBossで現在のEARの場所を取得する方法
- 12. dosの現在のセグメントを取得する方法
- 13. JqueryタブのUIで現在のタブタイトルを取得する方法
- 14. (現在のテンプレートの)親テンプレートインスタンスを取得する方法
- 15. Oracleの現在のGMTを取得する方法
- 16. Windowsで現在のユーザーのホームディレクトリを取得する方法
- 17. キャンバスの現在のビュー位置を取得する方法は?
- 18. jQueryのajaxSetupから現在の値を取得する方法
- 19. 現在のプロセスのWindowsパフォーマンスカウンタを取得する方法
- 20. GAEテンプレートで現在のページのURLを取得する方法
- 21. MFC(VC++)でアプリケーションの現在のパスを取得する方法
- 22. twitterで現在のユーザーの詳細を取得する方法
- 23. モデルフィールドの現在のユーザーを取得する方法
- 24. ブラックベリー現在の家の背景を取得する方法は?
- 25. jqGrid - 現在のグリッドのキャプションを取得する方法は?
- 26. 現在の飼育係クラスターのメンバーサーバーリストを取得する方法
- 27. 現在のノードの親ノード名を取得する方法は?
- 28. ブートストラップの現在の画面サイズを取得する方法は?
- 29. C#でWindows 8の現在のスレッドIDを取得
- 30. FragmentPagerAdapterで現在の位置を取得する方法は?
あるので、両方が同じ値を保持している、あなただけの「Iとはどういう意味ですかそれを読むことができません "? –