我已经尝试了几个小时的各种方法从文件加载图像.请看看这两种方法:
public Image SlowLoad(string path)
{
return Image.FromFile(path);
}
public Image FastLoad(string path)
{
using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(path)))
return Image.FromStream(ms);
}
Run Code Online (Sandbox Code Playgroud)
第二种方法比2倍快.我在这里错过了什么?为什么会这样?我简直不敢相信.NET开发人员无法使用我编写的方法更快地实现Image.FromFile.所以=>我错了.请告诉我在哪里.为什么第二种方法快2倍?我的代码完全正确吗?(线程安全等).也许Image.FromFile更安全?
AFAIK:首先 Image.FromFile 包装了 GDI+ GdipLoadImageFromFile* 函数,它们的生活很奇怪。GDI+ 图像在整个生命周期内保存并可以使用源(文件或流),有关它的一些详细信息http://support.microsoft.com/en-us/kb/814675。因此,这里有一些可能的“多文件 io”与“多流 io”。MS Reference Source System.Drawing.Image 中还有一些有趣的评论:
http://referencesource.microsoft.com/#System.Drawing/commonui/System/Drawing/Image.cs,181
class Image {
............
public static Image FromFile(String filename,
bool useEmbeddedColorManagement)
{
............
//GDI+ will read this file multiple times.
............
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3387 次 |
| 最近记录: |