C# 在UWP中使用动画的dwm(桌面窗口管理器)内存泄漏

C# 在UWP中使用动画的dwm(桌面窗口管理器)内存泄漏,c#,uwp,memory-leaks,dwm,C#,Uwp,Memory Leaks,Dwm,我为UWP编写了一个音乐播放器,它在播放音乐时使用了一些动画,就像旋转的盖子一样 我注意到桌面窗口管理器(dwm.exe)每秒消耗大约1 MB内存。上面显示的动画每秒消耗大约300-400kb。关闭应用程序不会释放内存 暂停动画将停止韭菜。恢复它,它又开始泄漏 动画元素的定义如下(打开完整文件): 动画通过代码隐藏进行控制: private static void IsPlayingChanged(DependencyObject d,DependencyPropertyChangedEv

我为UWP编写了一个音乐播放器,它在播放音乐时使用了一些动画,就像旋转的盖子一样

我注意到桌面窗口管理器(dwm.exe)每秒消耗大约1 MB内存。上面显示的动画每秒消耗大约300-400kb。关闭应用程序不会释放内存

暂停动画将停止韭菜。恢复它,它又开始泄漏

动画元素的定义如下(打开完整文件):


动画通过代码隐藏进行控制:

private static void IsPlayingChanged(DependencyObject d,DependencyPropertyChangedEventArgs e)
{
var me=d,表示正在播放的磁盘;
var elipse=me.CoverDisc;
如果(elipse为空)
返回;
var storyboard=elipse.Resources[“storyboard”]作为Windows.UI.Xaml.Media.Animation.storyboard;
if((bool)e.NewValue)
{
if(storyboard.GetCurrentState()==Windows.UI.Xaml.Media.Animation.ClockState.Stopped)
故事板。开始();
其他的
storyboard.Resume();
}
其他的
故事板。暂停();
}
除了不使用任何动画来降低内存占用外,我还能做什么?我注意到dwm在过去消耗了超过7Gb的内存,这使得使用机器几乎不可能

我使用这个应用已经有一段时间了,我不确定这个问题是否一直存在。它确实在过去运行了几个小时,至少我没有注意到任何消耗了这么多内存的东西

我在当前Windows版本的Surface Pro 6上运行:

Edition Windows 10 Home
Version 20H2
Installiert am  ‎16.‎10.‎2020
Betriebssystembuild 19042.964
Leistung    Windows Feature Experience Pack 120.2212.2020.0

Prozessor   Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz   2.11 GHz
Installierter RAM   16,0 GB
Systemtyp   64-Bit-Betriebssystem, x64-basierter Prozessor

编辑

我能够在另一台运行旧版本Windows的机器上测试它。 在那台机器上,内存消耗完全没有问题

Windows 10 Enterprise
Version 1908
Betriebssystembuild 17763.1879

如果正在播放音乐,并且您关闭了应用程序,因为使用了内存的情节提要对象,这可能会导致无法释放情节提要对象。因此,我建议您可以释放附加到App类的挂起事件中的内存对象。详情如下:

public App()
{
    this.InitializeComponent();
    this.Suspending += App_Suspending;
}
private void App_Suspending(Object sender, SuspendingEventArgs e)
{
    storyboard.Pause();
}

非常感谢。我试试看。当动画不断消耗内存而不释放时,你知道吗?我已经测试了你的代码片段,它在我的电脑上运行良好。当我播放动画时,它不会产生内存泄漏。如果您有更多的设备,您可以在具有不同版本操作系统的PC上测试它,以检查它是否也会发生,如果此问题没有发生,则可能与指定的PC有关。@Arya ding msft我已在另一台具有不同操作系统和处理器的PC上测试过它。在那里,我没有同样的问题。(请参见编辑)。我需要在更多的电脑上测试它。。我的电脑操作系统也是Windows10 20H2,但我没有遇到这种情况。通常不会发生内存泄漏,可能与您的电脑有关。