我的问题是我正在使用..
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我没有从那里得到帮助
答案 0 :(得分:2)
将对象设置为null并不意味着在垃圾收集发生之前它不会留在内存中。您可以显式调用垃圾收集(GC.Collect()
),但这是不可取的,除非您没有其他选择。
您可以使用dispose
代替强制垃圾回收。
class Video : IDisposable
{
public void Dispose()
{
//Close managed resources and etc.
}
}
并使用带有using
语句的类实例。 Here是如何使用IDisposable模式的好答案。
答案 1 :(得分:0)
您需要释放资源
using (Video video = new Video(vpath[a]))
{
.....
}
最后,您可以使用SetProcessWorkingSetSize修剪它使用的内存,请参阅此处的答案:webbrowser control with memory increasing problem
答案 2 :(得分:0)
您可以使用WMP来显示您的视频,这样WMP会礼貌地处理您的视频流,而不是一次性将其加载到内存中。
How to: Embed Windows Media Player on a Form
然后你就可以使用:
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...