【发布时间】:2015-11-24 16:25:57
【问题描述】:
考虑以下代码抛出异常'MILERR_WIN32ERROR':
while(true)
{
System.Windows.Media.Imaging.WriteableBitmap writableBitMap =
new System.Windows.Media.Imaging.WriteableBitmap(100, 200, 96, 96, System.Windows.Media.PixelFormats.Bgra32, null);
}
WriteableBitmap 没有实现 IDisposable,我完全不知道为什么会发生内存泄漏(我的原始代码要复杂得多,我对此进行了跟踪)。
【问题讨论】:
-
你的目标是什么版本的 vs 和什么版本的 .net 框架?
-
这段代码应该没问题(嗯......记住它在无限循环中,我知道原始代码中不存在)。在对您的错误进行快速搜索后,似乎是由大量图像对象引起的。因此,我想您应该查看其余代码中发生的情况。据我了解,您知道此 while(true) 是一个无限循环(您的实际代码应该在该循环中包含某些内容以在某些时候将其中断,否则您有错误的原因)。
-
我正在尝试编写一个程序,它逐帧读取视频文件并将这些帧均匀地混合在一起,代码基本上是通过一个视频文件并读取每一帧,将其写入writeablebitmap,将它插入另一个,然后继续到下一帧,当它用完要读取的视频帧时终止。我想我可以考虑尝试将多组帧组合在一起以加快速度。
-
您的意图很好,但发布的代码没有这样做。您发布的代码是一遍又一遍地实例化 WriteableBitmaps 而不会停止。读取文件时,循环会自动退出,因为给定的条件会告诉它们。使用 while(true) 您必须始终设置退出条件,否则循环将永远继续(更好:直到程序崩溃)。
-
@varocarbas 这没有意义,即使我无限循环并创建可写位图也不应该出现内存不足崩溃,垃圾收集器应该介入并确保在可写位图超出范围。代码 sn -p 足以说明内存问题。
标签: c# memory-leaks writeablebitmap writeablebitmapex system.windows.media