我必须生成大胖的大图像,比如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# – 检索可用的连续内存
基础教程推荐
- linux – 如何在Debian Jessie中安装dotnet core sdk 2023-09-26
- C# List实现行转列的通用方案 2022-11-02
- ZooKeeper的安装及部署教程 2023-01-22
- C# 调用WebService的方法 2023-03-09
- unity实现动态排行榜 2023-04-27
- C#控制台实现飞行棋小游戏 2023-04-22
- C#类和结构详解 2023-05-30
- winform把Office转成PDF文件 2023-06-14
- C# windows语音识别与朗读实例 2023-04-27
- 一个读写csv文件的C#类 2022-11-06