Một số mẹo để giảm mức sử dụng bộ nhớ của các ứng dụng .NET là gì? Hãy xem xét chương trình C # đơn giản sau.
class Program
{
static void Main(string[] args)
{
Console.ReadLine();
}
}
Được biên dịch trong chế độ phát hành cho x64 và chạy bên ngoài Visual Studio, trình quản lý tác vụ báo cáo những điều sau:
Working Set: 9364k
Private Working Set: 2500k
Commit Size: 17480k
Sẽ tốt hơn một chút nếu nó được biên dịch chỉ cho x86 :
Working Set: 5888k
Private Working Set: 1280k
Commit Size: 7012k
Sau đó, tôi đã thử chương trình sau, chương trình này cũng tương tự nhưng cố gắng cắt bớt kích thước quy trình sau khi khởi chạy thời gian chạy:
class Program
{
static void Main(string[] args)
{
minimizeMemory();
Console.ReadLine();
}
private static void minimizeMemory()
{
GC.Collect(GC.MaxGeneration);
GC.WaitForPendingFinalizers();
SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle,
(UIntPtr) 0xFFFFFFFF, (UIntPtr)0xFFFFFFFF);
}
[DllImport("kernel32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool SetProcessWorkingSetSize(IntPtr process,
UIntPtr minimumWorkingSetSize, UIntPtr maximumWorkingSetSize);
}
Kết quả trên Bản phát hành x86 bên ngoài Visual Studio:
Working Set: 2300k
Private Working Set: 964k
Commit Size: 8408k
Điều đó tốt hơn một chút, nhưng nó vẫn có vẻ quá mức đối với một chương trình đơn giản như vậy. Có thủ thuật nào để làm cho quy trình C # gọn gàng hơn một chút không? Tôi đang viết một chương trình được thiết kế để chạy trong nền hầu hết thời gian. Tôi đã thực hiện bất kỳ nội dung giao diện người dùng nào trong Miền ứng dụng riêng biệt , có nghĩa là nội dung giao diện người dùng có thể được tải xuống một cách an toàn, nhưng việc chiếm 10 MB khi nó chỉ ở chế độ nền có vẻ quá mức.
Tái bút Tại sao tôi lại quan tâm --- Người dùng (Power) có xu hướng lo lắng về những điều này. Ngay cả khi nó gần như không ảnh hưởng đến hiệu suất, những người dùng bán hiểu biết về công nghệ (đối tượng mục tiêu của tôi) có xu hướng gặp rắc rối về việc sử dụng bộ nhớ ứng dụng nền. Ngay cả khi tôi phát hoảng khi thấy Adobe Updater chiếm 11 MB bộ nhớ và cảm thấy được xoa dịu bởi cảm giác êm dịu của Foobar2000, có thể chiếm dưới 6 MB ngay cả khi chơi. Tôi biết trong các hệ điều hành hiện đại, thứ này thực sự không quan trọng lắm về mặt kỹ thuật, nhưng điều đó không có nghĩa là nó không ảnh hưởng đến nhận thức.