0

重複の可能性:
C#でオブジェクトを解放するにはどうすればよいですか?

私の問題は私が使用していることです..

 video = new Video(vpath[a]);
 video1 = new Video(vpath[a + 1]);
 video2 = new Video(vpath[a - 1]);

WinFormで同時に3つのビデオを表示するために..そしてこれはボタンイベントによって呼び出される関数で...しかしそれは多くのメモリを消費します...

これは私がしました

 video = null;
 video1 = null;
 video2 = null;

しかし、それでも私を助けてくれません...この3つのオブジェクトによるメモリ消費をどのように減らすことができますか?

私の質問は、重複の可能性があるとしてフラグが立てられます

https://stackoverflow.com/questions/2406794/how-do-i-free-objects-in-c-sharp

しかし、私はまだこのことを乗り越えたいと思っていますbcoz私はそれから助けを得ませんでした

4

3 に答える 3

2

オブジェクトを null に設定しても、ガベージ コレクションが発生するまでオブジェクトがメモリに残らないわけではありません。ガベージ コレクション ( GC.Collect()) を明示的に呼び出すこともできますが、他に選択肢がない場合を除き、これは望ましくありません。

disposeガベージ コレクションを強制する代わりに使用できます。

class Video : IDisposable
{
    public void Dispose()
    {
        //Close managed resources and etc. 
    }
}

そして、usingステートメントでクラスのインスタンスを使用します。これがIDisposableパターンの使用方法の良い答えです。

于 2012-10-15T07:00:17.450 に答える
0

リソースを解放する必要があります

   using (Video video = new Video(vpath[a]))
   {
    .....
   }

最後に、SetProcessWorkingSetSizeを使用して、使用するメモリをトリミングできます。ここで回答を参照してください:メモリ増加の問題を伴うWebブラウザ制御

于 2012-10-15T07:31:05.017 に答える
0

代わりに WMP を使用して動画を表示することもできます。これにより、WMP は動画をメモリに一度に読み込むのではなく、動画のストリーミングを丁寧に処理します。

方法: Windows Media Player をフォームに埋め込む

次に、次を使用します。

var video1 = new Uri("c:\\somefolder\\myVideo1.avi");
axWindowsMediaPlayer1.URL = video1.AbsoluteUri;

var video2 = new Uri("c:\\somefolder\\myVideo2.avi");
axWindowsMediaPlayer2.URL = video2.AbsoluteUri;

// and so on...
于 2012-10-15T07:42:56.063 に答える