私はスレッドを開始するために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. SKActionの現在のアニメーションフレームから現在のテクスチャを取得する方法は?
- 5. 現在再生中のビデオファイルの現在のフレームを取得する方法は?
- 6. 現在のタイムゾーンで現在のNSDateを取得する方法は?
- 7. イオンの現在のスライドのインデックスを取得する方法は?
- 8. jqueryのテキストボックスの現在の値を取得する方法
- 9. ブロックの変数の現在の値を取得する方法
- 10. wso2esbカスタムメディエータの現在のバージョンのレジストリリソースを取得する方法
- 11. MFC(VC++)でアプリケーションの現在のパスを取得する方法
- 12. 現在の飼育係クラスターのメンバーサーバーリストを取得する方法
- 13. radSchedulerの現在のセルを取得する方法
- 14. ページの現在のURLを取得する方法
- 15. WebApplicationContextを現在のサーブレットコンテキストの外部に取得する方法
- 16. jqGrid - 現在のグリッドのキャプションを取得する方法は?
- 17. キャンバスの現在のビュー位置を取得する方法は?
- 18. Windowsで現在のユーザーのホームディレクトリを取得する方法
- 19. スウィフト/現在の地図ピンのアドレスを取得する方法
- 20. 現在のアクティブユーザの最終レコードを取得する方法は?
- 21. リフレクトアセンブリの現在の物理パスを取得する方法
- 22. ハイブリッドアプリの現在のビューをビットマップに取得する方法
- 23. spring-webfluxで現在のリクエストのコンテキストを取得する方法
- 24. dosの現在のセグメントを取得する方法
- 25. asp.netで現在のユーザーの場所を取得する方法
- 26. JBossで現在のEARの場所を取得する方法
- 27. ブラックベリー現在の家の背景を取得する方法は?
- 28. Android - 現在の壁紙の名前を取得する方法
- 29. 現在のノードのIDを取得する方法
- 30. php/mysqlページングの現在のページを取得する方法
あるので、両方が同じ値を保持している、あなただけの「Iとはどういう意味ですかそれを読むことができません "? –