前几天我在这里发了一个问题,我抱怨说我的游戏消耗的内存太多了。
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。我读到这意味着我有一些无限循环。但我无法找到它的位置。