首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UWP MediaPlayer (Windows.Media.Playback.MediaPlayer)上的内存泄漏

UWP MediaPlayer (Windows.Media.Playback.MediaPlayer)上的内存泄漏
EN

Stack Overflow用户
提问于 2019-02-16 16:42:11
回答 2查看 743关注 0票数 0

我正在维护一个WPF应用程序。我在我的项目中添加了一个UWP nedia播放器。但是,内存使用率太高了。我意识到UWP媒体播放器是这么做的,所以我创建了一个可复制的代码。

代码语言:javascript
复制
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 Core3.0项目。(使用WPF的XAML岛)我还没有测试它是否发生在纯UWP项目中。

有人说这是自然的,因为它是一个循环。但是,下面的代码不会导致内存泄漏,因为GC可以工作。(当然,将不会收集一些(但具有限制性的)参考资料。)

代码语言:javascript
复制
while (true)
{
    new SomeClass();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-17 02:03:17

编写代码的方式--内存会膨胀和增长,直到内存耗尽。我也验证了纯UWP。如果您做了以下两个更改,您将发现内存将保持稳定,并且系统将在每个循环之后回收所有内存:

  1. 还可以释放您创建的MediaSource对象,并将其分配给Source属性
  2. 不要在很紧的循环中运行此操作,而是将自己作为调度程序操作调用。

下面是不显示任何泄漏的代码(在UWP中测试)。在WPF中,调度程序调用看起来略有不同:

代码语言:javascript
复制
private async void PlayMedia()
{
    var ms = MediaSource.CreateFromUri(new Uri("ms-appx:///Media1.mp4"));
    var mp = new MediaPlayer()
    {
        Source = ms
    };
    Thread.Sleep(1000);
    mp.Play();
    Thread.Sleep(1000);
    mp.Dispose();
    ms.Dispose();

    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, new DispatchedHandler(PlayMedia));
}

顺便提一句:如果SomeClass是一个纯托管代码类,那么您所提到的"SomeClass“比较并不完全是一个苹果对苹果的比较,因为您在这里创建的对象是复杂的本地Windows对象,它们周围只有一个很薄的托管代码包装。

现在也在WPF中测试:我复制了最初的内存增长问题,然后应用了建议的更改,并验证了内存不再增长。这是我的测试项目供参考:https://1drv.ms/u/s!AovTwKUMywTNuLk9p3frvE-U37saSw

另外,我运行您的共享解决方案时,WPF应用程序被打包成Windows,我没有看到最新发布的Windows10 (17763.316)版本出现漏洞。下面是运行解决方案相当一段时间后的内存诊断的屏幕截图。如果这是特定于内部构建您正在运行,请记录一个错误通过反馈集线器。我认为,在这一点上,我们应该结束这一问题的答案。

票数 1
EN

Stack Overflow用户

发布于 2019-03-01 15:22:06

这绝对是Windows 1019H1的一个bug。因为内置应用程序(电影和电视)存在相同的内存泄漏问题。要复制这个文件,只需重复打开的视频文件并关闭它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54725337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档