我必须生成大胖的大图像,比如150003000.我使用GDI,类Bitmap生成此图像.当然,有时候生成将失败,因为没有更多的内存来实例化Bitmap.我的目标是告知用户他们允许生成的图像的最大大小.该消息应如下所示:You tried to...
我必须生成大胖的大图像,比如15000×3000.我使用GDI,类Bitmap生成此图像.
当然,有时候生成将失败,因为没有更多的内存来实例化Bitmap.我的目标是告知用户他们允许生成的图像的最大大小.
该消息应如下所示:
You tried to generate an image of size 15000×3000, but there is not enough memory.
The maximum size available is 10000×3000, or 15000×1000.
创建消息的想法是这样的:
public bool CanCreateBitmap(Size size, out string message)
{
long availableMemory = this.GetAvailableContiguousMemory();
long bytesRequiered = (long)size.Width * size.Height * 32;
if (availableMemory < bytesRequiered)
{
var sizeProposal1 = new Size(size.Width, (int)(availableMemory / (32 * size.Width)));
var sizeProposal2 = new Size((int)(availableMemory / (32 * size.Height)), size.Height);
message = string.Format("You tried to generate an image of size {0}, but there is not enough memory."
+ Environment.NewLine + "The maximum size available is {1}, or {2}."
, size, sizeProposal1, sizeProposal2);
return false;
}
else
{
message = "";
return true;
}
}
但我没有GetAvailableContiguousMemory()函数的代码.
有没有一种方法可以检索.Net中的连续内存?
我问正确的问题是为了实现我的目标吗?
解决方法:
这种通知是一种实际上并没有帮助用户的创可贴.他们真的想要创建那个大位图,而任意小的位图并不是他们想要的.如果你想要做到这一点,那么你需要调整VirtualQuery来遍历虚拟地址空间并找到尚未映射的块.
现在不再有这个问题,将项目的平台目标设置更改为AnyCPU,这样您的程序就可以使用64位操作系统上可用的虚拟内存空间.
本文标题为:c# – 检索可用的连续内存
- Unity Shader实现模糊效果 2023-04-27
- .NET CORE DI 依赖注入 2023-09-27
- c# 模拟线性回归的示例 2023-03-14
- WPF使用DrawingContext实现绘制刻度条 2023-07-04
- user32.dll 函数说明小结 2022-12-26
- 如何使用C# 捕获进程输出 2023-03-10
- 在C# 8中如何使用默认接口方法详解 2023-03-29
- Oracle中for循环的使用方法 2023-07-04
- C# 使用Aspose.Cells 导出Excel的步骤及问题记录 2023-05-16
- Unity3D实现渐变颜色效果 2023-01-16