PDA

View Full Version : بدست آوردن فضای اشغال شده CPU توسط پردازش



_behnam_
شنبه 10 تیر 1391, 02:02 صبح
سلام دوستان،
میخواستم فضای اشغال شده RAM توسط پردازشهارو به درصد بدست بیارم
یعنی اینکه :
مثلا پردازش فتوشاپ چند درصد از RAM را اشغال کرده؟؟
ممنون میشم کمک کنید :لبخندساده:
کار با پردازشها رو تا حدودی بلدم مثل بدست آوردن لیست پردازش ها،بستن پردازش،استارت پردازش و ....

***توی عنوان تاپیک به اشتباه به جای RAM نوشتم CPU به بزرگی خودتون ببخشید***

ممنون/

_behnam_
شنبه 10 تیر 1391, 12:08 عصر
خطای تایپی پست اول اصلاح شد!!

Saeed_m_Farid
شنبه 10 تیر 1391, 12:50 عصر
اصلاً فرض کنیم شما هردوتاش هم منظورتون بوده! یه خط کد فرق می‌کنه :دی
از کلاس PerformanceCounter (http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.aspx) استفاده کنید؛ یه مثال بسیار کامل انتهای توضیحات داره که کاملاً شما رو با نحوه کار آشنا می‌کنه...
ضمناً چون گفتین بلدین لیست پردازش ها رو بگیرین، براتون یه مثال ساده (مانیتورینگ یه پردازش خاص تو کنسول) میذارم که می‌تونید تو یه foreach بجای proc اسم پردازش‌های واکشی شده رو بذارید و بحای while هم نتیجه رو به مقصد موردنظرتون بفرستید (که طبیعتاً بازم خواهم گفت: در یک worker thread مجزا):

Process proc = /*get the desired process here*/;
PerformanceCounter ramCounter =
new PerformanceCounter("Process", "Working Set", proc.ProcessName);
PerformanceCounter cpuCounter =
new PerformanceCounter("Process", "% Processor Time", proc.ProcessName);
while (true)
{
Thread.Sleep(500);
double ram = ramCounter.NextValue();
double cpu = cpuCounter.NextValue();
Console.WriteLine("RAM: "+(ram/1024/1024)+" MB; CPU: "+(cpu)+" %");
}

_behnam_
دوشنبه 12 تیر 1391, 23:09 عصر
سلام.
این دستور مقدار فضای اشغال شده توسط پردازش رو به MB نمایش میده.
چطوری میتونم اونو به درصد به دست بیارم؟:ناراحت:

ممنون/

Saeed_m_Farid
پنج شنبه 15 تیر 1391, 14:17 عصر
چطوری میتونم اونو به درصد به دست بیارم؟
یکمی به خودتون زحمت ندین ها یه موقع:لبخند:
اندازه حافظه رو با WMI بدست بیارین:
ManagementObjectSearcher Search =
new ManagementObjectSearcher("Select * From Win32_ComputerSystem");
double Ram_Bytes, Ram_KBytes, Ram_MBytes, Ram_GBytes;
foreach (ManagementObject Mobject in Search.Get())
{
Ram_Bytes = (Convert.ToDouble(Mobject["TotalPhysicalMemory"]));
Ram_KBytes = Ram_Bytes / 1024;
Ram_MBytes = Ram_Bytes / 1024 / 1024;
Ram_GBytes = Ram_Bytes / 1024 / 1024 / 1024;
// ...
}

و سپس یک نسبت تناسب ساده:
مقدار فضای اشغال شده توسط پردازش ضربدر 100 تقسیم بر اون مقدار بدست اومده!