1

管理されていないC++dllを使用する.NETWindowsサービスを構築しています。私のサービスとc++dllの両方がマルチスレッドを使用しています。処理中にしばらく(数時間)メモリが不足しています。「パフォーマンスカウンター」を使用してスレッド数を測定しようとしましたが、次の値を監視しています。

# of current logical Threads
# of current recognized threads
# of total recognized Threads

最初のものは安定していてその値は妥当ですが、2番目と3番目はそうではありません。それらは常に成長し、膨大な数(1500以上)に達しています。そして、それらは等しいです!!!!

それらは等しくなければなりませんか?また、これらのカウンターがマネージスレッドとアンマネージスレッドの両方をカウントするかどうかも、このページからはわかりませんでした。

アンマネージコードは、常に新しいスレッドを再利用するのではなく起動しているのではないかと思いますが、よくわかりません。

誰か助けてもらえますか?ありがとう

4

1 に答える 1

1

漏れのように聞こえます。アンマネージDLLがスレッドを適切に破棄していない可能性があります。

これを実際にテストするには、そのDLLを使用するシングルスレッドアプリを作成します。アプリを監視します。物事が適切に処理されていないことに気付いた場合は、2つの状況のいずれかが発生します。

DLL内の正しいメソッドを呼び出して、リソース(スレッド)を閉じていません。または、DLLのコーディングが正しくありません。1つ目は簡単に修正でき、2つ目はソースコードまたは元の開発者にアクセスする必要があります。

それがDLLであり、それらに連絡できない場合、またはそれらが修正することを望まない場合は、ほぼ同じことを行う他の何かを見つけてください。

于 2010-01-27T14:10:18.787 に答える