2012-10-02 41 views
0

我编写了一个处理tif文件的服务。 该过程的一部分是将多页tif分割成单页。C#Windows服务 - 内存不足错误

我上以下行的内存不足的错误:

System.Drawing.Image tiffImage = System.Drawing.Image.FromFile(path); 

的服务是没有得到充分利用,并有大量的可用存储空间的服务器上运行。

我做了一些研究和人们说,如果tif不正确(与pixal格式有关)可能会发生错误。 但是我用我的桌面(调试)与相同的tif文件运行代码,它分裂没有问题。

当我使用下面的代码查找内存使用:

Process proc = Process.GetCurrentProcess(); 

消息: - “内存使用” + proc.PrivateMemorySize64

I get the following results : 
12mb - server 
27mb - desktop 

这是否意味着服务在服务器上已经分配了更少的内存? 或者这是否意味着服务器上的服务使用较少的内存?

任何帮助将是非常美妙的 感谢 马丁

回答

0

System.Drawing中被gdiplus.dll的implemenented。可能是它在两台机器上运行的不同版本。

尝试在System.Windows.Media.Imaging中切换到WPF图像API。

+0

我尝试使用WPF成像,但我得到一个错误,当它在服务器上运行(而不是当我在我的开发PC上使用它)。错误是“Property can not be found”,当我使用BitmapDecoder.Create(originalFile,createOptions,BitmapCacheOption.None)时出现错误;你有什么想法吗?谢谢 – John

0

尽量不要在成像上使用任何微软软件。如果你的服务只是分割tiff文件,我建议你在互操作调用或命令行中使用libtiff。

MS和许多其他图形工具包尝试加载图像。使用libtiff,您不必加载它,并且可以在分割之前检查标题。

缺点是,它很难使用它。在2003年,为了对我们的ICR引擎进行性能测试,我们使用Intel C++ Compiler编译了libtiff。加载了一张A3,400 dpi 24位彩色tiff文件,并使用简单的阈值算法将其转换为黑白。在1300 Mhz的Intel Xeon CPU中,这一切都花费了200〜ms,并且内存为1 GB。这可能会给你一些数字

+0

你有使用Libtiff的基本例子吗?只是为了让我开始?在网上的一个让我有点困惑。 – John

+0

试试这个文件https://www.box.com/s/n2b8yks3kwhb72z2f1dd。我开始将官方的libiffff tiffsplit移植到c#中。从来没有测试过,它可能不工作,可能不会。但这对你来说是一个很好的起点 – edokan