【发布时间】:2014-11-07 18:29:08
【问题描述】:
我的应用程序的这一部分在图片框中显示来自 IP 摄像机的实时图像流。该流是典型的运动 JPEG,格式为多部分 HTTP 响应。
所有代码都已编写完毕,我的应用程序在 CPU 使用率非常低 (1-2%) 和跷跷板式内存占用(逐渐增加直到触发 GC,然后全部回收恢复正常)的情况下运行良好。所以这更像是一个优化问题、最佳实践等,不是必需的。
除此之外,现在我以正常的Bitmap.FromStream() 方式执行此操作,它为每帧生成一个全新的位图,频率为 60Hz。即使从运行时的角度来看这很好,这对作为程序员的我来说也是不和谐的。
如果我要使用更多的动手方法,我会预先分配已知大小的位图(320x240 或 640x480,取决于选项),然后将流解码为我的位图,但我没有看到 .NET执行此操作的功能。我必须使用我自己的 JPEG 解码器,这既是工作量太大,又是二进制大小(这东西已经是 55mb 的编译代码)。
所以我的问题是,我在这里遗漏了什么吗?有没有最好的方法来做这样的事情?我提到的功能会很完美,但如果不可用,我还能如何改进呢?
【问题讨论】:
-
您是否在每个位图对象上调用 dispose()?它将有助于内存管理,因为位图同时使用托管和非托管内存。
-
与我的问题无关,但不是。自己处理它会将它带到我的 UI 线程上,而不是让 GC 在它自己的终结器线程上执行它。它没有真正的收获,GC 处理 30-40mb 的位图。
标签: .net