2009-05-09 33 views
17

Tôi đã gặp một số sự cố khi tìm hiểu chính xác cách tôi sử dụng ram của quy trình. (Số lượng ram hiện đang tiêu thụ, không phải số tiền được đặt trước hoặc tối đa hoặc tối thiểu)Bắt đầu sử dụng ram của quá trình

Cho phép nói rằng tôi có một quá trình chạy ở mặt sau, Java.exe, nó được phép sử dụng 1024mb ram, làm thế nào tôi có thể nói bao nhiêu ram nó hiện đang sử dụng.

Tôi bắt đầu quá trình này, vì vậy tôi có quyền truy cập vào đối tượng Quy trình, tôi chỉ muốn làm rõ thêm một chút về thuộc tính nào là tài sản của tôi.

+0

trùng lặp có thể xảy ra của [Làm thế nào để có được bộ nhớ có sẵn hoặc sử dụng trong C#] (https://stackoverflow.com/questions/750574/how-to- get-memory-available-or-used-in-c-sharp) – Saul

Trả lời

16

Nếu bạn hoàn toàn quan tâm đến bộ nhớ vật lý, bạn có thể muốn WorkingSet64, cung cấp "số lượng bộ nhớ vật lý được phân bổ cho quy trình được liên kết". Hiểu rằng giá trị này liên tục biến động và giá trị mà cuộc gọi này cung cấp cho bạn có thể không được cập nhật. Bạn cũng có thể quan tâm PeakWorkingSet64, cung cấp "số lượng bộ nhớ vật lý tối đa được sử dụng bởi quy trình được liên kết".

+4

Tuy nhiên, hãy chú ý đến [các trang bị khóa] (http://forum.sysinternals.com/topic23886_post122660.html), không phải là một phần của bộ làm việc (đủ kỳ quặc) và [trình quản lý tác vụ tiêu chuẩn cũng không thấy chúng] (http://blogs.msdn.com/b/psssql/archive/2009/09/11/fun-with-locked-pages-awe- task-manager-and-the-working-set.aspx) (mặc dù chúng chắc chắn được tiêu thụ: D) –

+0

Tôi muốn sử dụng PeakWorkingSet64 để có được bộ nhớ tối đa được sử dụng bởi quá trình, nhưng Tôi không biết khi nào để tài sản này mang lại giá trị chính xác nhất. Tôi nghĩ rằng thời điểm tốt nhất để có được tài sản là khi quá trình này là "OnExitting", nhưng Process class don 'có sự kiện này. Nó chỉ có sự kiện Exited – Andiana

26

Tôi thấy điều này trên MSDN và nó đang làm việc

System.Diagnostics.Process proc = assign your process here :-) 

int memsize = 0; // memsize in Megabyte 
PerformanceCounter PC = new PerformanceCounter(); 
PC.CategoryName = "Process"; 
PC.CounterName = "Working Set - Private"; 
PC.InstanceName = proc.ProcessName; 
memsize = Convert.ToInt32(PC.NextValue())/(int)(1024); 
PC.Close(); 
PC.Dispose(); 
+1

đây là câu trả lời đúng –

+1

Tôi không nghĩ rằng bạn cần phải đúc số nguyên làm bạn? – Codingale

+0

@Laz được kiểm tra và giá trị trả về là chính xác nhất so với Trình quản lý tác vụ. nhưng đối với một số quy trình đa luồng như google chrome, nó không thể nhận được kết quả chính xác, bất kỳ ý tưởng nào? – Dennis

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