2009-11-28 17 views
7

Tôi đang sử dụng mã bên dưới để giải phóng bộ nhớ trên một số chương trình đang chạy vì chương trình của riêng tôi cần tài nguyên bộ nhớ lớn để chạy nhanh hơn.Các tác dụng phụ của việc sử dụng EmptyWorkingSet là gì?

[DllImport("psapi.dll")] 
public static extern bool EmptyWorkingSet(IntPtr hProcess); 

public FreeMem(string programName){ 

     EmptyWorkingSet(Process.GetCurrentProcess().Handle); 
     foreach(Process process in Process.GetProcesses(programName)) 
     { 
      try 
      { 
       EmptyWorkingSet(process.Handle); 
      } 
      catch (Exception) 
      { 
       ... 
      } 
     } 
} 

Dường như hoạt động tốt, tôi có thể giảm mức sử dụng bộ nhớ của một số chương trình như nhà thám hiểm từ 100.000 Kb xuống còn 2.000 Kb. Đó là khá tốt nhưng có một tác dụng phụ về việc này? Một số phần mềm thương mại cũng đang sử dụng trình quản lý này như Yamicsoft Vista/Xp và Trình tối ưu hóa Firefox để đặt tên cho một số ít vì vậy tôi đang nghĩ nếu điều này không có tác dụng phụ xấu hoặc có ở đó không?

Trả lời

2

Tôi nghi ngờ tác dụng phụ sẽ là hiệu suất của các chương trình khác - hệ thống sẽ đưa các trang đổi chỗ bằng cách gọi lại số EmptyWorkingSet() khi quá trình cần chúng.

Lộn xộn với hệ thống ở mức độ thấp như vậy là đầy nguy hiểm: đặc biệt, lỗi trang Explorer có thể làm chậm hệ thống xuống đến mức mà các dấu chết lạ bắt đầu làm chậm đầu xấu xí của chúng. Tốt nhất là để điều này cho Windows, đặc biệt là đối với các chương trình khác mà bạn không viết.

Bạn có thể thấy nó hiệu quả hơn để hiểu lý do tại sao chương trình của riêng bạn cần nhiều bộ nhớ. Có rò rỉ ở đâu đó, có lẽ?

+0

có lẽ bạn nói đúng. Tôi sẽ cố gắng tìm một cách để tối ưu hóa chương trình của riêng tôi thay vì tối ưu hóa các chương trình khác và xóa EmptyWorkingSet nếu nó nguy hiểm. – murasaki5

Các vấn đề liên quan