我必须生成大胖的大图像,比如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# – 检索可用的连续内存


基础教程推荐
- 实例详解C#实现http不同方法的请求 2022-12-26
- c# – USING块在网站与Windows窗体中的行为不同 2023-09-20
- Unity 如何获取鼠标停留位置下的物体 2023-04-10
- C#中 Json 序列化去掉null值的方法 2022-11-18
- C#调用摄像头实现拍照功能的示例代码 2023-03-09
- C#获取指定目录下某种格式文件集并备份到指定文件夹 2023-05-30
- Unity shader实现高斯模糊效果 2023-01-16
- C#中的Linq to JSON操作详解 2023-06-08
- C#通过标签软件Bartender的ZPL命令打印条码 2023-05-16
- C# 解析XML和反序列化的示例 2023-04-14