我有一个 C# 应用程序,它必须与 32 位库链接,并且还需要使用可能的最大内存量(成像应用程序);我们在 XP64 桌面上运行应用程序,因此我们使用 WOW64,针对 x86 的 Visual Studio 中的构建(并进行editbin /largeaddressaware
后期构建)。我们遇到了几个问题:
在 Visual Studio 内置调试器中,我们只能使用 2gb 内存(大约 1.5gb 到应用程序,加上开销)
从命令行运行,应用程序可以看到 3gb 的内存,但微软文档似乎说我们应该看到 4gb。
谁能告诉我如何让 WOW64 C# 应用程序查看平台应该能够提供的完整 4gb?
另外,谁能告诉我如何让 Visual Studio(VS 2008,也称为 VS90)调试器遵守该/largeaddressaware
位并停止将应用程序内存限制为 2gb?
我在 VS80 和 VS90 中看到了相同的行为;.NET Framework 3.5、3.0 和 2.0 之间也没有区别。这是一个说明问题的简单 C# 程序;为 x86 构建editbin /largeaddressaware
,然后在内置调试器中运行与从命令行运行以查看 C# 可用内存的差异。
namespace MemoryAllocTest
{
class Program
{
static void Main(string[] args)
{
const int allocSize = 1024 * 1024;
List<byte[]> myMem = new List<byte[]>();
UInt64 totalAlloc = 0;
while (true)
{
myMem.Add(new byte[allocSize]);
totalAlloc += allocSize;
Console.WriteLine("{0} allocs: {1}MB total",
myMem.Count, totalAlloc / (1024 * 1024));
}
}
}
}