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

但我仍然想克服这件事,因为我没有得到帮助

4

3 回答 3

2

将 object 设置为 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 来修剪它使用的内存,请参阅此处的答案:webbrowser control with memory increase issue

于 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 回答