問題タブ [finalize]
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.
c# - C# でのオブジェクト階層の適切な配置
特定のクラス階層が IDisposable を実装するプロジェクトに取り組んでいます。
一部のクラスは Finalize メソッド ( ~MyClass() ) も実装しています。
一般に、次のようになります。
これらのオブジェクトは Dispose() を呼び出すことによって破棄され、後で Finalize メソッドが呼び出されるためクラッシュするように見えるため、Dispose の呼び出しを処理する適切な方法を知りたいです。
階層の最下位クラス (保護された bool が破棄される) にフラグを保持し、クラス階層のすべてのレベルでそれを確認するのが最善ですか?
考えられるすべての解決策には、コードの重複が必要であることがわかりましたが、これは私が求めているものではありません。
java - Javaでのメモリリーク
jprofilerを使用して、クライアントコードのメモリリークを検出しました。開始時に、java.util.hashmap$entryによって使用されるメモリは1700KBまで大幅に増加していました。その後も減少しました。ヒープダンプショーjava.lang.ref.finalizerは最大のメモリを使用していました。それは何を結論付けますか?ソースコードでfinalize()を見つけようとすると、そこにありませんでした。HTMLファイルではfinalize()がこのように使用されました。 ファイナライズ、それはどういう意味ですか?原因はfinalize()であるか、参照hashmap $ entryがリークを引き起こしていますか?
java - Javaでオブジェクトを破棄する方法は?
次のオプションを使用したインタビューで、この質問に遭遇しました。
Javaでオブジェクトを破棄する方法は?
答えはeである必要がありますか?
eがなかったらどうしますか?それから ?明らかにcは答えではありません。aとbは、アプリケーション全体に対してgcを実行します(質問には1つのオブジェクトが必要です)。finalize()がgcの直前に呼び出されるため(ただし、finalizeの後にgcが呼び出される必要がありますか?)、それとも間違っているので、dだと思います。eはこの質問に答えるためにそこにいなければなりませんか?
c# - dispose/finalize パターンを使用してソケット/イベント/UMMAGED コードを解放するための正しい手法
クラスにソケットとイベントが含まれている場合に Dispose パターンを実装する方法は?
それはこのようなものであるべきですか?
私は混乱しています...ソケットクラスは「winSockのマネージコードc#バージョン」ですか?したがって、ユーザーが dispose と呼ばれる場合 (「isDisposing IS true」) に解放する必要があります。イベント ハンドラーはどうですか?
完成したコメント セクションでは、Inptr オブジェクトのみを解放する必要がありますか? ありがとう。
c# - デストラクタ、ディスポーズ、ファイナライズメソッドの違い
私はガベージコレクターがC#でどのように機能するかを研究しています。Destructor
、メソッドの使用について混乱していますDispose
。Finalize
私の調査と理解によると、クラス内にDestructorメソッドがあると、クラスのインスタンスで明示的に呼び出すことができないdestructorメソッドで説明されている方法でガベージコレクションを実行するようにガベージコレクターに指示されます。
このDispose
メソッドは、ガベージコレクションを制御するためのユーザーを提供することを目的としています。このFinalize
メソッドは、クラスによって使用されているリソースを解放しますが、オブジェクト自体は解放しません。
私はそれを正しい方法で理解しているかどうかわかりません。疑問を明確にしてください。それ以上のリンクやガイドは大歓迎です。
garbage-collection - メソッドを破棄すると、呼び出し元のオブジェクトも破棄されますか?
MSDN で次のコードを見つけました。
ここで混乱しているのは、obj.dispose を呼び出すと、クラス MyResources で作成されたオブジェクト、つまりハンドル、コンポーネントなどが破棄されることです。しかし、obj もヒープから削除されますか?? 同じことがデストラクタにも当てはまります。dispose を呼び出さないと、いつかデストラクタが呼び出されます。デストラクタ内のコードは、含まれているオブジェクトを削除します。しかし、オブジェクトはどうですか?第二に、クラス内でデストラクタが定義されておらず、dispose を呼び出すことさえしていない場合、GC はここに表示されませんか?
java - 配列の最初の要素を確定する
たとえば、整数の配列を保持するクラスがあるとします。
また、配列を初期化する単純なコンストラクターがあります。
ご覧のとおり、11
要素の配列があります。
ポイントは、最初のものを index で変更することは決してないということ0
です。
変更できないように、配列の最初の要素を確定する方法はありますか?
final
変数のように。
documentation - 生成されたSandcastleドキュメントの違いの原因を見つけるにはどうすればよいですか?
Noda Timeでは、SandcastleとSHFBを使用してドキュメントを生成します。次に、ドキュメントをソースリポジトリにコミットします。これは主に、最新の(および履歴の)ドキュメントを簡単に表示できるためです。
私はプロジェクトの主要な開発者ですが、2台のコンピューターを使用しています。残念ながら、両方とも同じソースに更新されていても、現時点では異なるドキュメントを作成しています。
2台のコンピューターは、私が考えることができるすべての重要な点で同じです。
- サンドキャッスル2.7.2.0
- SHFB 1.9.6.0
- VS 2012 Professional(両方とも「プログラム」でバージョン11.0.50727.1を報告し、両方とも「バージョン情報」ページで「バージョン11.0.51106.01アップデート1」を報告しました)
- .NET Framework 4.5のローカルヘルプコンテンツの最新バージョン(および他のフレームワークバージョンのローカルヘルプコンテンツはありません)
クリーンビルドを確実にするために取られたステップ:
- SHFBキャッシュフォルダを削除しました(
C:\Users\Jon\AppData\Local\EWSoftware\Sandcastle Help File Builder\Cache
) - ドキュメントが生成されるフォルダを削除しました
- SHFBプロジェクトファイルに関連するユーザー設定ファイルを削除しました
- VisualStudioのシンボルキャッシュを削除しました
それでも違いは残っています。特に、MSDN自体から継承されたドキュメントに限定されているようObject.Finalize
です。
バージョン1(マシン「Chubby」で生成):
バージョン2(マシン「Sandy」で生成):
どちらも同じMSDNドキュメントにリンクしています。これはバージョン1のように見えます(へのリンクはありませんObject
)。
変更されたファイルのいくつかを見ると、変更は一貫しており、このメンバーに制限されています。
Sandcastleはどこからこのドキュメントを入手できますか?また、両方のコンピューターを同じように動作させるにはどうすればよいですか?
編集:もう1つの情報の断片-両方のマシンでキャッシュをクリーンアップしてドキュメントを再構築した後、SHFBキャッシュディレクトリに3つのファイルがあります。
- Reflection.cacheは両方のマシンで同じサイズです
- MsdnUrl.cacheは両方のマシンで同じサイズです
- .NETFramework_4.0.0319_E8879A28.cacheのサイズはChubbyで13,377,733バイト、Sandyで13,337,949バイトです。
編集:重要な進歩!私は違いがおそらくどこから来ているのかを見つけました...
ファイルc:\Windows\Microsoft.NET\Framework\v2.0.50727\en\mscorlib.xml
:
- チャビーでは、2011年12月12日の日付で8,005,263バイトであり、リンクされていないテキストがあります。
Finalize
- On Sandyは2009年8月31日付けの9,740,370バイトで、
Finalize
リンクを含むテキストがあります
両方のマシンで、mscorlib.dll
それ自体は同じサイズ(4,550,656バイト)であり、2012年9月13日の変更日があります。
しかし、どうすればそれらを同じにすることができますか?その違いはどこから来るのですか?(サービスパック?)
編集:さて、のバージョンはc:\Windows
赤いニシンでした-それはc:\Program Files (x86)\Reference Assemblies\Microsoft\Framework
責任があるバージョンです。インストール間でなぜそれが異なるのかを知ることができるかどうかを確認します...
java - ファイナライズ メソッドのビットマップ リサイクルが正しく機能しない
アプリケーション ヒープの最大サイズに近いサイズのイメージをロードしようとすると、アプリケーションがクラッシュします。画像を初めてロードするときは問題ありません。次に、Bitmap オブジェクトへの参照を削除し、mBitmap.recycle() を呼び出す場所でそのファイナライズを削除します。 //nativeRecycle が呼び出されます。どうやらメモリ使用量は減っているようですが、画像を再度読み込もうとすると OutOfMemory でクラッシュします。興味深いのは、参照を削除したのと同じクラスでリサイクルを呼び出すと、メモリが解放されたように見え、イメージを再度ロードできることです。したがって、基本的に、ビットマップを参照するオブジェクトのファイナライズに mBitmap.recycle() を配置する場合よりも、mBitmap.recycle() を直接呼び出すと、異なる結果が得られます。なぜこれが起こっているのですか?