c#程序获取bitmapimage时,会卡顿大约6s。怎么解决啊大神们

hyz747 2015-08-24 02:13:52
大概在return 那边卡住几秒,而且只卡住一次,过了一次就好了,如果关掉重开还是会再卡一次
public bitmapimage getimg(string filrpath){
// Read byte[] from png file
BinaryReader binReader = new BinaryReader(File.Open(filePath, FileMode.Open));
FileInfo fileInfo = new FileInfor(filePath);
byte[] bytes = binReader.ReadBytes((int)fileInfo.Length);
binReader.Close();

// Init bitmap
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = new MemoryStream(bytes);
bitmap.EndInit();
return bitmap;
}
我也打过断点尝试过了,就是在return 前停滞了,找不到原因,还有我写的是wpf程序。
...全文
662 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyz747 2015-08-28
  • 打赏
  • 举报
回复
引用 19 楼 xx87343133的回复:
没用过c#,说下猜想,一般来说在主线程卡上好几秒,一般是因为耗时计算或者加载文件,一张不太大的图片解码不可能需要好几秒,很可能是加载包含图片解码程序的dll,你可以试试先开个线程进行图片加载流程,让系统把需要的文件加载上来,然后获取个事件啥的,在做你的业务流程。
嗯,我试试
xx87343133 2015-08-26
  • 打赏
  • 举报
回复
没用过c#,说下猜想,一般来说在主线程卡上好几秒,一般是因为耗时计算或者加载文件,一张不太大的图片解码不可能需要好几秒,很可能是加载包含图片解码程序的dll,你可以试试先开个线程进行图片加载流程,让系统把需要的文件加载上来,然后获取个事件啥的,在做你的业务流程。
crystal_lz 2015-08-25
  • 打赏
  • 举报
回复
我就一直在想 为什么不

Bitmap bmp = new Bitmap(strFileName)
hyz747 2015-08-25
  • 打赏
  • 举报
回复
引用 13 楼 crystal_lz的回复:
我就一直在想 为什么不

Bitmap bmp = new Bitmap(strFileName)
这样不会导致占用文件医院吗。
crystal_lz 2015-08-25
  • 打赏
  • 举报
回复
引用 17 楼 hyz747 的回复:
[quote=引用 15 楼 crystal_lz的回复:][quote=引用 14 楼 hyz747 的回复:] [quote=引用 13 楼 crystal_lz的回复:]我就一直在想 为什么不

Bitmap bmp = new Bitmap(strFileName)
这样不会导致占用文件医院吗。[/quote]

Bitmap bmp = null;
byte[] byFile = File.ReadAllBytes("C:\\123.png");
using (MemoryStream ms = new MemoryStream(byFile)) {
    bmp = new Bitmap(ms);
}
[/quote] ms不能作为参数传递给他的构造函数[/quote] 你是在逗我吗- -! https://msdn.microsoft.com/zh-cn/library/system.drawing.bitmap.bitmap.aspx Bitmap(Stream) 从指定的数据流初始化 Bitmap 类的新实例。
hyz747 2015-08-25
  • 打赏
  • 举报
回复
引用 15 楼 crystal_lz的回复:
[quote=引用 14 楼 hyz747 的回复:] [quote=引用 13 楼 crystal_lz的回复:]我就一直在想 为什么不

Bitmap bmp = new Bitmap(strFileName)
这样不会导致占用文件医院吗。[/quote]

Bitmap bmp = null;
byte[] byFile = File.ReadAllBytes("C:\\123.png");
using (MemoryStream ms = new MemoryStream(byFile)) {
    bmp = new Bitmap(ms);
}
[/quote] ms不能作为参数传递给他的构造函数
hyz747 2015-08-25
  • 打赏
  • 举报
回复
引用 15 楼 crystal_lz的回复:
[quote=引用 14 楼 hyz747 的回复:] [quote=引用 13 楼 crystal_lz的回复:]我就一直在想 为什么不

Bitmap bmp = new Bitmap(strFileName)
这样不会导致占用文件医院吗。[/quote]

Bitmap bmp = null;
byte[] byFile = File.ReadAllBytes("C:\\123.png");
using (MemoryStream ms = new MemoryStream(byFile)) {
    bmp = new Bitmap(ms);
}
[/quote] 哦~~~~我来试试
crystal_lz 2015-08-25
  • 打赏
  • 举报
回复
引用 14 楼 hyz747 的回复:
[quote=引用 13 楼 crystal_lz的回复:]我就一直在想 为什么不

Bitmap bmp = new Bitmap(strFileName)
这样不会导致占用文件医院吗。[/quote]

Bitmap bmp = null;
byte[] byFile = File.ReadAllBytes("C:\\123.png");
using (MemoryStream ms = new MemoryStream(byFile)) {
    bmp = new Bitmap(ms);
}
hyz747 2015-08-24
  • 打赏
  • 举报
回复
引用 10 楼 sp1234 的回复:
[quote=引用 2 楼 hyz747 的回复:] [quote=引用 1 楼 shingoscar 的回复:] 是不是图片太大啦
不会的,图片大小都一样,而且只卡一次,如果重新再运行一遍他就不这样了。 我说的重新是不关掉程序,通过按钮再运行一遍。肯定不是图片大小问题。 唉,这问题简直太恶心。莫名其妙的[/quote] 如果你不搞明白为什么“第二次”就快了,那么你也不太可能搞明白该自己设计的东西。[/quote] 我这个还不涉及设计,只是单纯的学习,要设计总得把基础的学会吧。我现在只是打基础,忘指点迷津啊
hyz747 2015-08-24
  • 打赏
  • 举报
回复
引用 9 楼 sp1234 的回复:
上面已经有人说过的,就不重复了。这里只是补充他的回复:更深入的做法,就需要在业务协议上下功夫。例如 1. 超过一定尺寸的大图,应该自动改为4个、16个、64个......许多个小图下载,并且在前端拼接时也不需要相互等待、阻塞。 2. 实际上任何下载都应该先比加一下本地的缓存,如果完全不需要下载,何必真的下载?你需要多写几行代码实现处理本地缓存,不要那么简单地写人尽皆知的代码,要把心思放在业务设计上。只有流程比别人强(而不是仅仅技术比别人强),才能满足图片速度要求。
这个是自然的。不过图片大小没问题的啊。就是第一次加载图片的时候会产生这样的问题,图片是放在本地的,为什么会出现这种现象呢。
  • 打赏
  • 举报
回复
引用 2 楼 hyz747 的回复:
[quote=引用 1 楼 shingoscar 的回复:] 是不是图片太大啦
不会的,图片大小都一样,而且只卡一次,如果重新再运行一遍他就不这样了。 我说的重新是不关掉程序,通过按钮再运行一遍。肯定不是图片大小问题。 唉,这问题简直太恶心。莫名其妙的[/quote] 如果你不搞明白为什么“第二次”就快了,那么你也不太可能搞明白该自己设计的东西。
  • 打赏
  • 举报
回复
上面已经有人说过的,就不重复了。这里只是补充他的回复:更深入的做法,就需要在业务协议上下功夫。例如 1. 超过一定尺寸的大图,应该自动改为4个、16个、64个......许多个小图下载,并且在前端拼接时也不需要相互等待、阻塞。 2. 实际上任何下载都应该先比加一下本地的缓存,如果完全不需要下载,何必真的下载?你需要多写几行代码实现处理本地缓存,不要那么简单地写人尽皆知的代码,要把心思放在业务设计上。只有流程比别人强(而不是仅仅技术比别人强),才能满足图片速度要求。
hyz747 2015-08-24
  • 打赏
  • 举报
回复
引用 7 楼 shingoscar 的回复:
bi.CacheOption = BitmapCacheOption.OnDemand; bi.CreateOptions = BitmapCreateOptions.DelayCreation;
没用欸。。加在哪里,另外这两句什么用啊
Poopaye 2015-08-24
  • 打赏
  • 举报
回复
bi.CacheOption = BitmapCacheOption.OnDemand; bi.CreateOptions = BitmapCreateOptions.DelayCreation;
hyz747 2015-08-24
  • 打赏
  • 举报
回复
引用 4 楼 colored_glass 的回复:
以前也遇到过,后来怎么解决的?? 历史太过悠久。。不记得了 只好给你点信心,总是能解决的
美女~~~救命啊~~~赶快记起来啊啊啊啊啊啊
hyz747 2015-08-24
  • 打赏
  • 举报
回复
引用 3 楼 sunny906 的回复:
可以把getimg放到threadpool里
可是前台界面不一样会卡住吗
Irise_liu 2015-08-24
  • 打赏
  • 举报
回复
以前也遇到过,后来怎么解决的?? 历史太过悠久。。不记得了 只好给你点信心,总是能解决的
sunny906 2015-08-24
  • 打赏
  • 举报
回复
可以把getimg放到threadpool里
hyz747 2015-08-24
  • 打赏
  • 举报
回复
引用 1 楼 shingoscar 的回复:
是不是图片太大啦
不会的,图片大小都一样,而且只卡一次,如果重新再运行一遍他就不这样了。 我说的重新是不关掉程序,通过按钮再运行一遍。肯定不是图片大小问题。 唉,这问题简直太恶心。莫名其妙的
Poopaye 2015-08-24
  • 打赏
  • 举报
回复
是不是图片太大啦

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧