しかし、Imageが規則に従い、ファイナライザーを実装していて、リソースのタイムリーなリリースを気にしない場合、ポイントは何ですか?
あなたは完全に処分のポイントを逃しました。それはあなたの便利さではありません。それは、これらの管理されていないリソースを使用する可能性のある他のコンポーネントの利便性に関するものです。システム内の他のコードがリソースのタイムリーなリリースを気にしないことを保証できず、ユーザーがリソースのタイムリーなリリースを気にしない場合を除いて、できるだけ早くリソースをリリースする必要があります。それは丁寧なことです。
古典的な囚人のジレンマでは、協力者の世界で唯一の亡命者が大きな利益を得る。しかし、あなたの場合、孤独な脱北者であることは、低品質でベストプラクティスを無視するコードを書くことによって、個人的に数分を節約するというほんのわずかな利益しか生み出しません。苦しむのはユーザーとユーザーが使用するすべてのプログラムであり、実質的に何も得られません。あなたのコードは、他のプログラムがファイルのロックを解除し、ミューテックスなどを解放するという事実を利用しています。良い市民になり、彼らのために同じことをしてください。それは難しいことではなく、ソフトウェアエコシステム全体をより良くします。
更新:これは、私のチームが現在対処している実際の状況の例です。
テストユーティリティがあります。管理されていないリソースの束が積極的に廃棄されないという点で、「ハンドルリーク」があります。「タスク」ごとにおそらく半ダースのハンドルがリークしています。無効になっているテストなどを検出したときに、「実行するタスク」のリストを保持します。このリストには1万から2万のタスクがあるため、すぐに非常に多くの未処理のハンドル(デッドになってオペレーティングシステムにリリースされるはずのハンドル)ができてしまい、すぐにシステム内のコードがなくなってしまいます。テストに関連して実行できます。テストコードは気にしません。それはうまく機能します。ただし、最終的には、テスト対象のコードでメッセージボックスやその他のUIを作成できず、システム全体がハングまたはクラッシュします。
ガベージコレクターは、これらのハンドルをより早く解放するために、ファイナライザーをより積極的に実行する必要があることを知る理由はありません。なぜそれが必要ですか?その仕事はメモリを管理することです。あなたの仕事はハンドルを管理することなので、あなたはその仕事をしなければなりません。