MediaElements消耗大量内存

时间:2017-09-03 07:30:40

标签: c# wpf memory-leaks mediaelement

前几天我在这里发了一个问题,我抱怨说我的游戏消耗的内存太多了。

The game I am making consumes way too much memory

在答案和评论中,我建议检查游戏中究竟是什么原因,并指出确切的问题。

我使用过VS2017内置工具,发现MediaElements占用了大部分内存。

我确实拥有大量的MediaElements,其中大部分是画外音。

我已将所有来源设置为null,然后让游戏仅在播放时加载相关文件的来源,完成时将其重置为null。

voice_path.Add("vcoCombine_armed_slingshot_canned_food", vcoCombine_armed_slingshot_canned_food.Source.ToString());

vcoCombine_armed_slingshot_canned_food.Source = null;

    public void AssignPathVoice(MediaElement vcoThis)
    {
        if (voice_path.ContainsKey(vcoThis.Name.ToString()))
        {
            string path = voice_path[vcoThis.Name.ToString()];
            vcoThis.Source = new Uri(path, UriKind.Relative);
            vcoThis.Play();
        }
    }

它有助于减少大量内存使用,但仍然不够。

可以采取哪些措施来减少MediaElements的内存使用量?

我尝试使用“.Freeze()”,就像推荐使用图像的人一样,但不能这样做,也不能这样做:

vcoSomething.Freeze();

也不是:

vcoSomething.Source.Freeze();

现在有没有办法减少MediaElements使用的内存?

谢谢,

叶甫盖尼

更新: 到目前为止我尝试了什么:

1)只使用一个MediaElement,并更改其来源,它没有帮助。

2)将源文件从WAV更改为MP3。这减少了硬盘内存消耗,但不是RAM。

3)尝试查找是否有内存泄漏。在游戏运行时获取内存快照。我得到了“Hashtable [Cycle Detected]”也以某种方式连接到MediaElements。我读到这意味着我有一些无限循环。但我无法找到它的位置。

0 个答案:

没有答案