gpt4 book ai didi

c# - 检索可用的连续内存

转载 作者:太空狗 更新时间:2023-10-30 00:53:22 27 4
gpt4 key购买 nike

我必须生成大图像,比如 15000x3000。我使用 GDI+ 生成此图像,类 Bitmap .

当然,有时候生成会失败,因为没有更多的内存来实例化Bitmap。我的目标是告知我的用户他们可以生成的图像的最大尺寸。

消息应该是这样的:

You tried to generate an image of size 15000x3000, but there is not enough memory. The maximum size available is 10000x3000, or 15000x1000.

创建消息的想法是这样的:

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 来遍历虚拟地址空间并找到尚未映射的 block 。

现在没有必要再遇到这个问题了,将项目的 Platform Target 设置更改为 AnyCPU,这样您的程序就可以使用 64 位操作系统上可用的大量虚拟内存空间。

关于c# - 检索可用的连续内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16686476/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com