2011-12-22 11 views
3

Windowsのタスクマネージャは、アプリケーションのCPUとメモリの使用状況を確認するのに問題ありませんが、私たちのプログラムではスレッドが異なり、スレッドごとにどれだけ多くの量があるかを知りたいとします。C#:スレッドのワークロードとメモリの使用

これは外部のプログラマで、また実行時にはアプリケーション自体からも確認したいと考えています。もしスレッドが自分のメモリとCPU使用量を知ることができれば素晴らしいだろう。

答えて

-1

オブジェクトはスレッド間で共有され、スレッドはオブジェクトを所有しません。

オブジェクトのメモリは、アプリケーションの領域に存在するヒープに割り当てられます。どのスレッドも、アプリケーションの存続期間中いつでもこのメモリにアクセスできます。

どのスレッドが任意のメモリブロックを使用しているか、使用しているかを判断する方法はありません。

スレッドは作業単位を実行します。どのスレッドがどの作業単位を実行するのか分からない限り、CPU使用率から信頼できるメトリックを得ることはできません。どのスレッドがどのタスクを実行しているか分かっている場合、SysInternalsのProcess Explorerにこのメトリックがあります。

+0

これを明確にしてもらえますか?私はそれを理解しているか分からない。 – Groo

+0

これは当てはまりません。メモリ使用量はC#の特定のスレッドによる割り当てに戻って追跡することができ、CPU使用率はスレッドごとに最も確実に測定できます。 – Polynomial

+0

@Polynomialは、信頼性も一貫しても、何も遠隔的に有用ではありません。静的変数を考えてみましょう。オブジェクトを作成したスレッドはスレッドプールから削除されてもまだメモリはまだ残っています!!著しい。 downvoteを削除してください。 –

0

パフォーマンスモニタを使用して、プロセスに割り当てられているメモリ量を確認できますが、その内部の単一スレッドでは同じ量を見ることはできません。

ただし、カスタムperformance countersを作成して、コード内から監視したい値を表示することができます。

0

SysInternals Process Explorerこの機能は、this Server fault threadをチェックしてください。

CodeProjectにはオープンソースプロジェクトがあり、スクリーンショットは有望です:How to get CPU usage of processes and threads、デモプロジェクトはWin7でクラッシュしているようです(おそらくいくつかの特権が失われているようです)。

[編集]あなたはそれを自分で書きたい場合は、P /単一プロセス内のスレッドを列挙しThread32FirstThread32Next機能を起動し、各スレッドのCPU時間を照会するQueryThreadCycleTimeを使用することができます。

1

例は次のとおりです。 あなたはthreadAとThreadBを持っています。 ThreadAがオブジェクトXを作成します。 ThreadBがこのオブジェクトを使用します。 スレッドの情報で何を見たいですか?誰がオブジェクトを作成したのか、誰がそれを使用していますか? あなたが見ることができるのはスレッドを使用しているCPU時間です。AFAIK プロセスでMAX情報が表示されているのと同じプログラムだけがプロセスエクスプローラです。 http://technet.microsoft.com/en-us/sysinternals/bb896653

+1

これは答えよりも、質問に対するコメントに似ています。 –

+0

もう少し情報と可能な解決方法を追加しました。 – Elastep

+1

いいえ、basicalylはこれは不可能だと言います。スロットに割り当てられたメモリのみがスタックです。残りはすべて共有されます。 – TomTom

関連する問題