7

.Net 4.0アプリケーションにリークがあり、長期間使用するとクラッシュします。調査の結果、「ユーザーオブジェクト」がリークしていることがわかりました。Userオブジェクトは、次のようにWindowsリソースです。

http://msdn.microsoft.com/en-us/library/ms725486%28v=VS.85%29.aspx

Windowsは、プロセスごとに10,000のユーザーオブジェクトを割り当てます。GDIオブジェクトやハンドルなどの他のウィンドウリソースは、アプリの実行中は一定です。

私はC++についても同様の質問を見つけました。この場合、ソリューションではMicrosoftreseachから「detours」というパッケージをダウンロードする必要がありました。10,000ドル。

Antメモリプロファイラーを使用すると、私は疑います、それはメニューと関係があります。SyncFusionのメニューを使用しているため、コードを調べてもメニューに関連するもののライフサイクルを見つけることはできません。したがって、これはSynFusionが解決しなければならないバグである可能性があります。

SyncFusionメニューを使用して同様のリークがある人はいますか?Antsは、いくつかのPopupMenuオブジェクトが残っていると言っていますが、Antsは、オブジェクトが作成された場所を見つける方法(したがって、オブジェクトを破棄する場所を決定する方法)に関する情報を提供しません。

上記のSO投稿で言及されているleakTrap/detoursは、USERオブジェクト割り当てへの特定の呼び出しをトラップしているように見えるため、興味深いように見えます。

提案を歓迎します

4

1 に答える 1

1

メニューがぶらぶらしていることがわかっている場合は、プロセスの GDI オブジェクトを列挙し、DeleteMenu () でそれらをナーフできるはずです。

ウィンドウは、ポップアップ メニューが表示されて閉じられたときに親ウィンドウに通知する必要があるため、GDI メニュー ハンドルのスナップショットを取得して新しいものを削除するのに最適な場所になります。

このような低レベルの GDI 操作を行うのはおそらくいたずらである .net にはお勧めできません。

私は SyncFusion メニューを備えた簡単なテスト アプリを作成してその点を証明し、問題が解決しない場合はベンダーに連絡します

于 2011-07-09T15:14:01.630 に答える