4

多数のXPSドキュメント(数千)で実行されるWinForms .Netアプリがあり、この実行中に、ハンドルの数(sysinternalsプロセスモニターとタスクマネージャーによる)がドキュメントごとに3〜10ずつ増加します。これらはMS.NetXPSフレームワークライブラリによって開かれ、閉じられないハンドルであると強く疑っていますが、追跡することはできません。

コードをステップスルーしても、同じ実行中のさまざまなポイントでハンドル数が増加します。たとえば、ループを1回通過すると、ハンドルカウントが1行で1ジャンプし、次回はジャンプしないか、2ジャンプする可能性があります。したがって、XPScomコンポーネントにハンドルリークがあると思われます。

メモリの使用は問題ありませんが、このようにハンドルを使い果たし続けると、アプリとおそらくデスクトップがクラッシュします。

これまで、sysinternalsプロセスエクスプローラーでハンドルを確認してみましたが、すべて詳細がないものとしてマークされています。また、sysinternalsのhandle.exeを使用しました。これは、スナップショットの前、最中、後の間に大きな違いはありません。

ハンドルがどこに向かっているのかを追跡する方法についての手がかりはありますか?テストするには、シングルスレッドのコンソールアプリに単純化する必要があると思います。

よろしく

ライアン

4

4 に答える 4

1

単体で使うにはちょっと高いですが、ANTS Profilerを使っていて、このような問題を見つけるのにとても役に立ちます。試用版をダウンロードして試すことができます。

おそらく他にも優れたプロファイラーがあると思いますが、これは私がよく知っているプロファイラーです。

于 2008-10-23T20:57:13.790 に答える
1

ばかげているかもしれませんが、使い捨てのものをすべて処分していることを確認しましたか?

于 2008-10-23T20:54:50.253 に答える
0

YourKit .netプロファイラーを使用して、この種の障害を正確に診断する良い経験があります。強くお勧めします-比較的安価で、C ++-CLIにもかなりうまく対応します(ジェットブレインからのドットトレースなど、拒否したか、完全にクラッシュしたものを試しました)。

于 2012-06-18T11:53:26.997 に答える
0

作成した XPS ドキュメントを PackageStore から削除するのを忘れていませんか? また、Package をサポートするために使用される MemoryStreams についてはどうでしょうか?

于 2009-03-30T21:31:17.717 に答える