Tôi có ứng dụng C# phải liên kết với thư viện 32 bit và cũng cần sử dụng số lượng bộ nhớ tối đa có thể (ứng dụng hình ảnh); chúng tôi chạy ứng dụng trên máy tính để bàn XP64, do đó chúng tôi đang sử dụng WOW64, nhắm mục tiêu xây dựng trong Visual Studio cho x86 (và thực hiện một bài đăng sau khi xây dựng editbin /largeaddressaware
). Chúng tôi đang gặp phải một vài vấn đề:Phát triển và gỡ lỗi mem-hogging C# apps
Trong Visual Studio tích hợp trình gỡ lỗi, chúng tôi chỉ có thể bao giờ sử dụng 2GB bộ nhớ (~ 1.5GB để ứng dụng, cộng thêm chi phí)
Chạy từ dòng lệnh, ứng dụng có thể thấy 3gb bộ nhớ, nhưng các tài liệu của Microsoft dường như nói rằng chúng ta sẽ thấy 4gb.
Bất cứ ai có thể cho tôi biết cách tải ứng dụng WOW64 C# để xem toàn bộ 4GB mà nền tảng có thể cung cấp?
Ngoài ra, bất cứ ai có thể cho tôi biết làm thế nào để có được trình gỡ lỗi Visual Studio (VS 2008, còn được gọi là VS90) tuân theo bit /largeaddressaware
và dừng giới hạn bộ nhớ ứng dụng xuống 2GB?
Tôi thấy cùng một hành vi trong VS80 và VS90; cũng không có sự khác biệt giữa .NET Framework 3.5, 3.0 và 2.0. Đây là một chương trình C# tầm thường minh họa các vấn đề; xây dựng cho x86, editbin /largeaddressaware
, sau đó chạy trong trình gỡ lỗi tích hợp so với chạy từ dòng lệnh để xem sự khác biệt trong bộ nhớ có sẵn cho 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));
}
}
}
}
Bạn có thể chạy editbin trên các tệp MSIL exe không? –