Windows Media Player在Win10 1809 LTSC下内存泄漏问题求解决方案
Windows 10 IoT LTSC 1809 WMP.dll 循环播放内存泄漏排查方案
一、内存泄漏根源定位
- 优先使用VMMap、DebugDiag工具抓取内存快照,确认泄漏内存的归属:排查是WMP.dll的非托管堆泄漏、GDI对象泄漏,还是音视频帧缓冲未正常释放,重点关联每次循环播放后残留内存块的调用栈,确认是否指向WMP.dll内部的解码、渲染逻辑。
二、代码层面规避方案
- 不要复用同一个WMP控件实例做循环播放,每轮播放结束后先显式调用
close()方法释放资源,再销毁控件句柄,重新实例化WMP控件后加载媒体文件触发下一轮播放,禁止仅调用controls.play()做循环触发。 - 若使用
axWindowsMediaPlayer封装控件,每轮播放结束后手动设置URL = null强制释放关联媒体资源,再重新赋值媒体路径完成重载。 - 关闭WMP冗余配置项:设置
settings.autoStart = false、settings.bufferTime = 1,减少缓冲内存的不必要累积。
三、系统层面修复尝试
- 检查1809 LTSC版本的WMP专项补丁安装情况:KB5003171、KB4561600均为微软官方发布的WMP内存泄漏修复补丁,你当前使用的
12.0.17763.1821版本WMP对应2021年4月的系统更新,可单独安装上述补丁无需升级系统大版本。 - 若补丁安装后问题仍存在,尝试将应用程序的运行兼容模式指定为Windows 10 1607版本,绕过当前WMP版本的逻辑缺陷。
四、底层调用优化方案
- 绕过默认的WMP控件封装,直接调用WMP底层COM接口
IWMPPlayer、IWMPMedia手动管理资源生命周期,每轮播放结束后显式调用Marshal.ReleaseComObject()释放所有关联COM对象,避免引用计数泄漏导致内存无法回收。
内容的提问来源于stack exchange,提问作者Gforse
相关产品推荐
相关产品推荐

