2009-10-28 24 views
5

.NET 2.0とネイティブC++が混在するアプリケーションがあります。テストでは、一連のプロジェクトを自動的にループするモードがあります。プロジェクトが開き、実行され、終了し、繰り返されます。これらの各ステップでは、ウィンドウの作成/削除(正確にはwinforms)が必要です。最近、私たちはパフォーマンスにおいて幾分奇妙な行動を経験しました。数時間運転した後、開閉部品が減速します(GUIスレッドをブロックし、画面の半分を表示するなど)。これでリソースリークが発生するのは簡単ですが、ハンドルとメモリを追跡していますが、メモリがわずかに増加する間にこのレベルの問題を示すものはありません。ハンドルは安定しています。だから多分、イベントハンドラをぶら下げて...それでも調査する必要がある。しかし、私を困惑させるキッカーは、アプリケーションをシャットダウンして再起動しても、最初のパフォーマンスが戻ってこないということです。私はOSを再起動するまではまだ遅いですが(XPに勝つ)、パフォーマンスは再びうまく始まります。これは、アプリケーションをシャットダウンしてすべてのリソースを取り戻すことを前提としているので、私は本当に困惑しています。何かご意見は?アプリケーションでの奇数のパフォーマンスの低下

+0

が漏れました。徹底的に違うものはすべて調査の価値がある。無料、または良い、または無料で良いプロファイラーの周りにたくさんあり、ちょうどいくつかを試し、あなたが快適であるものを選んでください。 – Rom

答えて

0

私たちは、あなたが減速する前と後のプロファイラーの下でアプリケーションを実行し、2つの結果を比較する必要があるウィンドウクラス

1

GDIハンドルリークの可能性があります。 GDI objectsはガベージコレクタによって自動的に選択されません。

.NETメモリプロファイラ(http://memprofiler.com/)は、これらを追跡するうえで役立ちます(14日間の試用版があります)。 (GDIハンドルビューアツールへのリンクがあります)

+0

私はメモリプロファイラの使用を2回目にします。スナップショットを撮って比較することができます。そのため、ある反復でスナップショットを撮り、次のスナップショットで別のスナップショットを撮り、それらを比較することができます。 – stusmith

+0

私は.NET Memory Profilerを持っていますが、アプリケーションを再起動しても問題が解決されないという事実は、プロセスの成長の何ものによっても説明されません。 – user109078

+0

GDIハンドルなどの特定の限られたシステムリソースには当てはまりません。 –

0

あなたはリソースリーク(悪い推測ではない)を想定していますが、それは別のものかもしれません。

パフォーマンスプロファイラを試しましたか?

関連する問題