입니다. 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와 관리되는 스레드 ID (Thread.CurrentThread.Name을 통해)를 비교하는 것과 매우 비슷합니다. . 진단 네임 스페이스. 관리되는 스레드 ID! = ProcessThreadID라는 것을 기억하십시오. 당신은 GetCurrentThreadId 기능을 http://msdn.microsoft.com/en-us/library/ms683183(VS.85).aspx
3) 나사) 풀 스레드를 재활용 할 수 있습니다, 그래서 당신은
4
을 기대하고 무엇을 스레드 풀에 대한 TotalProcessorTime보다 클 수 있습니다 당신은 프로파일 링하는 경우 스레드 사용을 사용해야합니다 그것 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. 비 현재 스레드의 스택 추적을 얻는 방법은 무엇입니까?
- 2. 스레드의 상태를 얻는 방법은 무엇입니까?
- 3. 스레드의 현재 활동보기
- 4. 현재 스레드의 성능 카운터
- 5. 현재 스레드의 아파트 상태를 확인하는 방법은 무엇입니까?
- 6. 현재 ProcessID를 얻는 방법은 무엇입니까?
- 7. 일시적으로 현재 스레드의 culture를 변경하는 좋은 방법입니까?
- 8. 백그라운드 스레드의 데이터를 현재 표시된 활동으로 전달하는 방법은 무엇입니까?
- 9. 다른 Windows 프로세스에서 스레드의 현재 로캘을 가져옵니다.
- 10. 현재 스레드의 culture 코드 설정은 무엇을합니까?
- 11. 현재 실행중인 .NET 스레드와 Win32 스레드의 차이점
- 12. 현재 재생중인 동영상 파일의 현재 프레임을 얻는 방법은 무엇입니까?
- 13. 기존 .NET 스레드의 스택 크기를 얻는 방법
- 14. 현재 요청의 도메인을 얻는 방법은 무엇입니까?
- 15. 브라우저가 현재 방문하고있는 URL을 얻는 방법은 무엇입니까?
- 16. jCarousel Lite로 현재 색인을 얻는 방법은 무엇입니까?
- 17. SQL에서 현재 datetime을 얻는 방법은 무엇입니까?
- 18. rspec의 현재 컨텍스트 이름을 얻는 방법은 무엇입니까?
- 19. fbjs에서 현재 URL을 얻는 방법은 무엇입니까?
- 20. 현재 실행중인 실제 캡션을 얻는 방법은 무엇입니까?
- 21. moviePlayer에서 현재 재생 시간을 얻는 방법은 무엇입니까?
- 22. 현재 플랫폼을 설명하는 문자열을 얻는 방법은 무엇입니까?
- 23. 현재 레이아웃의 이름을 얻는 방법은 무엇입니까?
- 24. 현재 사용자 에이전트를 얻는 방법은 무엇입니까?
- 25. DB2에서 현재 분리 레벨을 얻는 방법은 무엇입니까?
- 26. 브라우저에서 현재 열려있는 페이지를 얻는 방법은 무엇입니까?
- 27. 현재 GPS 시간을 얻는 방법은 무엇입니까?
- 28. SharePoint에서 현재 URL을 얻는 방법은 무엇입니까?
- 29. 플라스크에서 현재 포트 번호를 얻는 방법은 무엇입니까?
- 30. HtmlHelper에서 현재 경로를 얻는 방법은 무엇입니까?
그래서 모두 같은 값을 유지 나는 단지 그것을 읽을 수 없습니까? " –