.netでGDI+の使用とガベージコレクション機能

Jubeat Analyzerは譜面動画のフレーム出力機能があります。
そして私はニコニコとかの動画サイトで数字付くの譜面動画を見たことがある。

その数字はどう追加するのだろう。キーワードとかわからなくてネットで検索して役に立てる情報出ていない。

譜面情報を取得したら自分でプログラム書いてフレームに数字を追加する。

譜面情報の取得は予想以外にめちゃくちゃ難しい。デバッグとかと共に何日かかった。

それはこのポストのポイントじゃないですが(

重点は、私は譜面情報をメモリに読み込んだ、そして毎フレームに数字を書くのループで、OutOfMemoryException起こった。

あれ?プログラムは フレームをメモリに読み込み→数字を描く→画像ファイルに保存 しかなにもやってないはず。.netはガベージコレクション機能があるのだろう。じゃ私は別にImageオブジェクトとGraphicsオブジェクトはほかの所で使用じゃないので、メモリ使用は多くなった時ガベージをコレクションすべき。なんでこうなったんだ。

そして私はループにSystem::GC::Collect();を使用して、問題は解決しました。

いや、まって。手動でSystem::GC::Collect関数を呼ぶことは推奨ではない。じゃどうすればいいのだろう。

ネットで検索して、何かが出てる

.netでGDI+を使用しても中はnativeのオブジェクトです。そのnativeのオブジェクトはガベージコレクションの規制外です。多くのメモリを使用したことはガベージコレクションシステムに知らない。メモリ不足してもガベージコレクションシステムは「もう仕事の時間だ」とか意識してなかった。

結論:
こんなオブジェクトを使用する時、C#でusingを使って/C++でdeleteを使ってDispose関数を呼ぶ必要があります。ガベージコレクション機能は頼ら過ぎると悲劇は起こった(おい

正しいかどうかわからないだけどね。
でもdelete使ったらOutOfMemoryExceptionは起こらなくなった。

・・・(日本語力は不足だ。こんなブログの書きとかすごく難しい・・・しかも正しく表れなかった気がする