可以通内存泄漏工具检测一下看对象是被那里使用导致GC未回收。推荐使用.NET Memory Profiler。另外可以看看WriteableBitmap
WPF的Image控件如何正确释放图片资源
有一个项目是需要在后台不断地采集高清摄像头的图片的
大概是每秒3帧左右,而图片分辨率是 5472*3648, 8位深度,19.0MB
图片比较大,程序开启,只是后台采集摄像头的图片,还什么都没做,就已经吃掉1G多的内存了
现在好不容易给降到稳定在500MB内存占用左右了,但感觉和WINFORM的比较起来,简直被吊打
在程序运行时因为还会用到opencv做模板匹配,瞬间的内存峰值能达到3G左右
而使用winform的picturepox发现,内存占用连100MB都不到,这是什么鬼
而我特意将图片保存下来复制个十几份到一个文件夹中,写了一个winform和WPF的demo,都是开了一个后台线程
然后从文件夹中随机读取图片并显示到控件上,两个示例demo的内存占用WPF的比WINFORM的高五六倍...
有没有其它更好的方式呢?因为图片不能压缩,必须得完全放到Image控件上(后面因为还会对图片进行缩放,平移,绘制标记等一系列操作,就相当于一个简易的地图的功能)
下面是WPF的示例,一个循环
private void LoopMethod()
{
while (true)
{
try
{
//获取摄像头图片
var bitmap = this.controller.GetCameraImage();
//转换为BitmapImage
BitmapImage newimage = new BitmapImage();
MemoryStream memoryStream = new MemoryStream();
bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Bmp);
newimage.BeginInit();
newimage.CacheOption = BitmapCacheOption.OnLoad;
newimage.StreamSource = memoryStream;
newimage.EndInit();
newimage.Freeze();
bitmap.Dispose();
memoryStream.Dispose();
this.Dispatcher.Invoke(new Action(() =>
{
//图片加载到控件上
this.img.Source = newimage;
}));
Thread.Sleep(400);
}
catch
{
return;
}
finally
{
GC.Collect();
}
}
}
而下面是winform的示例
private void LoopMethod()
{
while (true)
{
//获取摄像头图片
var bitmap = this.controller.GetCameraImage();
this.pictureBox1.Image?.Dispose();
this.pictureBox1.Image = bitmap;
Thread.Sleep(400);
}
}
- 点赞
- 写回答
- 关注问题
- 收藏
- 复制链接分享
- 邀请回答
2条回答
为你推荐
- wpf Inkcanvas怎么保存为透明的图片,我设置控件透明后保存得到的是灰色背景
- c#
- 1个回答
- 一个深重的WPF控件制作难题
- wpf 使用TranslateTransform后控件显示不全
- c#
- 1个回答
- 为什么我的WPF添加新项-自定义控件 会报错,并且不产生Themes文件夹
- 1个回答
- WPF中怎样实现叠加显示大量图片?
- 6个回答
- WPF获取日期控件选择的日期 DatePicker.SelectedDate 报了个错
- 6个回答
- wpf 关于控件样式继承
- 3个回答
- WPF自定义控件样式设置后控件默认模板失效
- 4个回答
- wpf border控件如何添加鼠标点击效果
- 1个回答
- wpf Image 鼠标点击事件问题
- 1个回答
- WPF怎么实现这样的控件功能
- 2个回答
- WPF 使用 WebBrowser 控件,提示脚本错误
- 3个回答
- WPF里面嵌套Winform中的ImageBox控件实现图片拖动,滚轮控制缩放的问题
- 4个回答
- WPF 有没有实现如图所示的控件?
- c#
- 2个回答
- WPF界面里拖动自定义控件,WPF界面并没有后台代码。
- 1个回答
- WPF 输出dll文件没有嵌入主题资源
- 1个回答
- WPF自定义按钮问题 -- 样式相同图片不同
- 2个回答
- c#2010的wpf程序怎么设置控件不可见?
- c#
- 2个回答
- c#的wpf的控件字体大小问题
- c#
- 2个回答
- wpf中添加控件怎么不显示
- 1个回答