【发布时间】:2019-03-11 04:57:23
【问题描述】:
我正在维护一个 WPF 应用程序。我在我的项目中添加了一个 UWP 媒体播放器。但是,内存使用率太高了。我意识到 UWP 媒体播放器做到了,所以我创建了一个可重现的代码。
while (true)
{
var mp = new MediaPlayer()
{
Source = MediaSource.CreateFromUri(new Uri("Test.mp4"))
};
Thread.Sleep(1000);
mp.Play();
Thread.Sleep(1000);
mp.Dispose();
}
此代码发生内存泄漏。我创建了 MediaPlayer 并处理了它!但是,它的内存使用量会无限增长。
如何发现这段代码的内存泄漏?
这是 .NET Core 3.0 项目。 (带有 WPF 的 XAML 岛)我还没有测试它是否出现在纯 UWP 项目中。
有人说这是自然的,因为它是一个循环。但是,下面的代码不会造成任何内存泄漏,因为 GC 有效。 (当然,一些(但限制性的)参考文献不会被收集。)
while (true)
{
new SomeClass();
}
【问题讨论】:
-
你还没有运行 GC。你需要运行它并设置收集大对象的选项以确保根本没有任何泄漏。
-
我调用了 System.GC()。但是,它没有收集到。