C# 使用佳能EDSDK下载图像的最快方法是什么?

C# 使用佳能EDSDK下载图像的最快方法是什么?,c#,edsdk,canon-sdk,C#,Edsdk,Canon Sdk,我使用C EDSDK为佳能相机创建了一个相机控制器应用程序。我可以将图像下载到主机PC上,但与佳能EOS实用软件相比,这仍然需要很多时间。目前我正在下载一张2200万像素的Jpg图像,只需2.5秒。当我使用佳能软件时,不到一秒钟。对于22MPixel的原始图像,使用佳能实用软件大约需要2到3秒,使用SDK大约需要11秒 我在EventHandler中使用以下代码: public void DownloadImage(DownloadItem item) { EDSDK.EdsDi

我使用C EDSDK为佳能相机创建了一个相机控制器应用程序。我可以将图像下载到主机PC上,但与佳能EOS实用软件相比,这仍然需要很多时间。目前我正在下载一张2200万像素的Jpg图像,只需2.5秒。当我使用佳能软件时,不到一秒钟。对于22MPixel的原始图像,使用佳能实用软件大约需要2到3秒,使用SDK大约需要11秒

我在EventHandler中使用以下代码:

public void DownloadImage(DownloadItem item)
{
        EDSDK.EdsDirectoryItemInfo dirInfo;
        IntPtr streamRef;
        Stopwatch timer = new Stopwatch();
        timer.Start();
        Error = EDSDK.EdsGetDirectoryItemInfo(item.ImageObjectPointer, 
                                              out dirInfo);
        Error = EDSDK.EdsCreateFileStream(
                                item.FilePath, 
                                EDSDK.EdsFileCreateDisposition.CreateAlways, 
                                EDSDK.EdsAccess.ReadWrite, 
                                out streamRef);

        Error = EDSDK.EdsDownload(item.ImageObjectPointer, dirInfo.Size, streamRef);
        //Tell the SDK we finished the download
        Error = EDSDK.EdsDownloadComplete(item.ImageObjectPointer);
        //Release Resources
        Error = Release(streamRef);
        Error = Release(item.ImageObjectPointer);
        timer.Stop();
        var ms = timer.ElapsedMilliseconds;
        this.Log().DebugFormat("Download time for image {0}: \t{1}\t ms",
                                Path.GetFileName(item.FilePath),
                                ms.ToString());

    }
有人知道更快的图像下载程序吗? 或者佳能在他们的软件中使用完全不同的例程

提前感谢您的帮助

解开了谜团! 就我所知,上面的代码是最快的图像下载方法。我还尝试将图像下载到内存流中,然后保存图像,就像JohannesB建议的那样,请参见上面的评论。正如他已经提到的,这在下载时间上没有太大区别,但最终它帮助我发现大部分时间都花在了保存图像上

保存时间长的原因是所选的文件位置。默认情况下,它指向Environment.SpecialFolder.MyPictures。这是指向我的网络驱动器。当我选择本地驱动器时,22MPixel Jpeg的保存时间下降到150ms


非常感谢你的帮助

下载ApiMonitor并查看EOS实用程序软件是否使用EDSDK:谢谢,我试过了,他们似乎正在使用SDK。您可以尝试先下载到memorystream,然后再下载到硬盘,即文件流。除此之外,据我所知,SDK对您没有什么帮助。我试过了,并测量了将映像下载到内存流和将映像保存到磁盘所需的时间。大部分时间用于保存图像。完整分辨率22MPixel原始图像的下载时间仅为1到1.2秒,但保存图像却花费了我超过10秒的时间。我想应该有一种更快的方法来保存数据。目前,我正在使用UnmanagedMemoryStream类中的CopyTo方法。