問題タブ [resource-leak]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - セクション ハンドル リークの原因は何ですか?
これは私の前の質問のフォローアップの質問です。
前の質問に対するこの回答で示唆されているように、 ProcessExplorerを使用して、アプリケーションが使用しているハンドルのリストを分析し、ハンドル リークを見つけました。
リークしているハンドルのタイプはSectionです。
セクション ハンドルとは正確には何ですか? セクション ハンドルはどこで使用され、セクション ハンドルがリークする原因は何ですか?
コードでメモリ マップ ファイルを使用していません。
memory-leaks - Jersey クライアント接続クローズ時のメモリ リークの問題
私はJersey v10を使用しており、次のコードを書きました。これは、Jerseyクライアント接続を閉じてメモリリークを回避する正しい方法ですか.私は最終的にこれまで呼び出しを行っていませんでした.
TIA、ビジェイ
c# - ガベージ コレクションを確実にするためにダイアログ フォームの周りにステートメントを使用する
何千ものフォームを含む Windows フォーム アプリケーションがあります。
これらの多くは、ShowDialog() メソッドを介してダイアログとして一時的に表示されます。
このアプリケーションは何年も前から存在しており、フォームまたはそれが使用するコントロールでのさまざまなリソース リークが原因で、多くのフォームでガベージ コレクションがタイムリーに行われていないことがわかりました。
具体的には、適切に破棄されていない GDI+ リソースの例が見つかりましたが、まだ特徴付けられていない他の種類のリソース リークがある可能性があります。
これを解決する正しい方法は、明らかに、すべてのフォームとすべてのコントロールを調べて、すべてのリソースの問題を排除することです。これには時間がかかります。
短期的な代替手段として、フォームで明示的に Dispose() を呼び出すとガベージ コレクション プロセスが開始され、フォームとそのリソースの割り当てがすぐに解除されることがわかりました。
私の質問は、フォームが表示された後に Dispose() が呼び出されるように、各フォームの ShowDialog() ブロックを using ステートメントでラップすることが合理的な回避策であるかどうかです。
たとえば、既存のコードを次のように変更します。
これに:
私たちのテストでは、最初の例では MyForm の Dispose() メソッドが呼び出されることはありませんが、2 番目の例ではすぐに呼び出されます。
これは、特定のリソースの問題をそれぞれ追跡するのに時間を費やしている間、短期的な回避策として合理的なアプローチのように思えますか?
これらのタイプのリソースの問題を特定して解決するための短期的な回避策や方法論として検討できる他のアプローチはありますか?
objective-c - NSDictionarymutableCopyはexc_bad_accessを発生させます
NSDictionaryでキーをコピーした後、クラッシュします。ARCを使用しています。理由は何ですか?
c# - マスター/詳細ビューでの RenderTargetBitmap GDI ハンドル リーク
マスター詳細ビューを備えたアプリがあります。「マスター」リストから項目を選択すると、「詳細」領域にいくつかの画像 (RenderTargetBitmap で作成) が入力されます。
リストから別のマスター アイテムを選択するたびに、アプリで使用されている GDI ハンドルの数 (プロセス エクスプローラーで報告されている) が増え、最終的には 10,000 個の GDI ハンドルでフォールオーバー (またはロックアップ) します。
私はこれを修正する方法について途方に暮れているので、私が間違っていることに関する提案 (またはより多くの情報を取得する方法に関する提案) をいただければ幸いです。
「DoesThisLeak」と呼ばれる新しい WPF アプリケーション (.NET 4.0) で、アプリを次のように簡略化しました。
MainWindow.xaml.cs 内
MainWindow.xaml 内
リストの最初の項目をクリックし、下向きカーソル キーを押したままにすると、問題を再現できます。
WinDbg で SOS を使用して !gcroot を調べたところ、これらの RenderTargetBitmap オブジェクトを維持するものは何も見つかりませんでしたが、!dumpheap -type System.Windows.Media.Imaging.RenderTargetBitmap
それでもまだ収集されていない数千のオブジェクトが表示されます。
windows-7 - Windows 7 での 1 つのプロセスの GDI オブジェクトの上限はいくつですか?
最終的に 10,000 個の割り当てられた GDI オブジェクトに到達してクラッシュする GDI リークのあるアプリケーションを用意します。GDIProcessHandleQuotaを 20,000 に増やしてみましたが、オブジェクトが 10,000 に達したときにプログラムがクラッシュしました。現在、このリークにパッチを当てる作業を行っていますが、好奇心から、単一プロセスの GDI 制限を増やす方法はありますか? それとも、10k は個々のアプリケーションのハード リミットですか?
pthreads - プロセス内から unix リソースを監視する
fork() を試行したり、スレッドを生成したりして、EAGAIN が大量に発生したため、どこかでリソースをリークしていると思い込んでしまいました。
POSIX で、プロセス自体の内部から次のものを取得することは可能ですか。
- アクティブな pthread の数
- アクティブな子プロセスの数
- アクティブなパイプの数
- アクティブなソケットの数 (または、これとパイプがファイル記述子としてカウントされるのでしょうか?)
または、これらは手動でカウントする必要がありますか? それらのカウンターは既にありますが、そのうちの 1 つが漏れていると思います。
delphi - FastMMは、リークされたメモリや割り当てられたメモリのみを報告しますか?
FastMMを使用してプログラムをデバッグしていますが、報告されているメモリリークの多くは、実際のメモリリークではなく、正当なメモリ割り当てのようです。
例えば、
TConnObjは、オブジェクトを作成するために頻繁に使用されるクラスであり、プログラムがオブジェクトを必要としなくなったときに破棄されます。ただし、FastMMは、実際のメモリリークであると報告しています。では、FastMMメモリリークログファイルを見ると、どれがどれであるかをどのように判断できますか?
android - いつネイティブ (Android NDK) ハンドルを解放する必要がありますか?
ネイティブ ライブラリを使用する必要があります (これは私の決定ではありません)。ライブラリにはすでに JNI ラッパーがあり、サンプルの Android NDK コードは機能します。ただし、ライブラリの初期化ルーチンはネイティブ ハンドルを返すため、開発者はそれらを正しく閉じる必要があります。
さて、興味深い質問があります: close_handle ルーチンをどこから呼び出すか?
少なくとも理論的には、正しく終了しないと、ディスク上のどこかに一時ファイルが残ったり、その他の種類のリソース リークが発生したりする可能性があります。
ライブラリの初期化には 0.5 ~ 1 秒かかり、多くのメモリを消費します。
AnActivity
は (MVC の意味で) コントローラーであり、Android は、デバイスの回転など、独自の理由でそれを強制終了できます。呼び出されることが保証されている唯一の関数は ですonPause()
。そのため、 onPause
/onResume
は、リソースを消費する長い操作には適していません。
(私は知ってandroid:configChanges="keyboardHidden|orientation"
いますが、それを必要としないソリューションを好みます。)
Application
理想的な候補です(ライブラリはモデルの一部であると考えています)が、「アプリケーション終了」イベントはありません。
ネイティブライブラリがService
サービスであることは有望に思えますが、目的の動作を実現する方法がわかりません。アプリケーションの終了時にハンドルを閉じる必要があります。
タイムアウト: トレードオフのように聞こえますが、実際には、メモリが必要な瞬間には使用できず、数秒後に使用可能になることが保証されます。
.net - ASP.Net 4のThreadAbortExceptionがファイルハンドルをリークしていますか?
時折、ファイルサーバーが遅く、ページがタイムアウトまでに終了しない場合、ASP.NetはThreadAbortExceptionでそれにヒットします。Win32Native.CreateFile内でそれが発生した場合、iisresetを実行するまでファイルハンドルはロックされたままになります。
これは.NETの欠陥ですか?タイムアウトを巨大な数に上げるなど、この悪いアイデアの不足について私たちにできることはありますか... ThreadAbort.Resetは、損傷がすでに発生していて、ファイルハンドルが返されていないため、役立つとは思いません。 FileStreamから自分で閉じます。
Microsoft.Win32.Win32Native.CreateFile(String lpFileName、Int32 dwDesiredAccess、FileShare dwShareMode、SECURITY_ATTRIBUTES securityAttrs、FileMode dwCreationDisposition、Int32 dwFlagsAndAttributes、IntPtr hTemplateFile)
Microsoft.Win32.Win32Native.SafeCreateFile(String lpFileName、Int32 dwDesiredAccess、FileShare dwShareMode、SECURITY_ATTRIBUTES securityAttrs、FileMode dwCreationDisposition、Int32 dwFlagsAndAttributes、IntPtr hTemplateFile)
System.IO.FileStream.Init(String path、FileMode mode、FileAccess access、Int32 rights、Boolean useRights、FileShare share、Int32 bufferSize、FileOptions options、SECURITY_ATTRIBUTES secAttrs、String msgPath、Boolean bFromProxy、Boolean useLongPath)
System.IO.FileStream..ctor(文字列パス、FileModeモード、FileAccessアクセス、FileShare共有、Int32 bufferSize、FileOptionsオプション、String msgPath、ブールbFromProxy)
System.IO.FileStream..ctor(文字列パス、FileModeモード)で