图像加载的性能

Pat*_*ski 5 c# image stream

我已经尝试了几个小时的各种方法从文件加载图像.请看看这两种方法:

    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更安全?

Ili*_*kov 2

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)