Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用大型位图会导致内存不足异常_C#_Memory Management_Gdi+ - Fatal编程技术网

C# 使用大型位图会导致内存不足异常

C# 使用大型位图会导致内存不足异常,c#,memory-management,gdi+,C#,Memory Management,Gdi+,我需要在飞行中编辑(增加高度)图像。 该文件的尺寸大多为5000*4000。当我创建一个大尺寸的bmp并在bmp实例上调用Graphics.DrawImage方法时,我看到内存达到峰值 如何消除内存不足异常?有没有办法在c#中处理大型位图?这取决于您的应用程序特定要求,这在yuor post中不是很清楚,但一般来说,处理大型媒体文件(图像、声音、视频)我认为确实是一个很好的解决方案 将YOUR图像保存在磁盘上的内存映射文件中,并调整其在磁盘上的大小,方法是从可能不需要快速访问的大量数据中尽可能

我需要在飞行中编辑(增加高度)图像。 该文件的尺寸大多为5000*4000。当我创建一个大尺寸的bmp并在bmp实例上调用Graphics.DrawImage方法时,我看到内存达到峰值


如何消除内存不足异常?有没有办法在c#中处理大型位图?

这取决于您的应用程序特定要求,这在yuor post中不是很清楚,但一般来说,处理大型媒体文件(图像、声音、视频)我认为确实是一个很好的解决方案

将YOUR图像保存在磁盘上的内存映射文件中,并调整其在磁盘上的大小,方法是从可能不需要快速访问的大量数据中尽可能多地释放YOUR RAM(至少在那一刻)

希望这有帮助。
注意。

问题在于操作需要大量内存。您的文件大约需要千兆字节,因此解决方案可能是使用流并将文件分块处理

或者最好的选择是使用第三方库。下面是.Net的一些示例

也看看这个所谓的问题


这是一个内存问题检查一下,我想当你试图为.dll占用超过GB的内存时,你和其他人都遇到了同样的问题。可能的答案是使用流并将文件分块处理。80MB的位图很大,但不是很大。但是,如果不在应该调用Dispose()时调用Dispose(),则会耗尽内存。垃圾收集器的运行频率不足以隐藏此问题。这在中不容易做到。请相信我,这比以前容易得多,因为现在您已经包装了.NET类。(仅适用于.NET Framework 4.0)内存不足绝不会导致OOM。位图已经使用MMF,创建更多只是让您更快地用完虚拟内存。@Hans:“位图已经使用MMF”您确定吗?我也很好奇,所以我反编译了
System.Drawing.Bitmap(string)
,看不到任何MMF代码。。。下面的GDI方法能做到吗
int num=SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(文件名,输出零)