Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать загрузку процессора 
:(
    Опции темы
sindi8
Дата 27.9.2005, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 6.6.2005
Где: Москва

Репутация: нет
Всего: нет



Здравствуйте.
Подскажите пожалуйста, можно ли используя .NET узнать загрузку процессора? Если нет - не подскажете как мне это сделать используя WinAPI?
PM MAIL   Вверх
Spawn™Production®
Дата 27.9.2005, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Тестер ПО, VB.NET Developer
**


Профиль
Группа: Участник
Сообщений: 398
Регистрация: 12.4.2005
Где: Зеленоград

Репутация: 1
Всего: 12



Разве что средствами WMI.


--------------------
ОС: WinXP SP2 Rus
Frameworks: v1.0.3705, v1.1.4322, v2.0.50215, v2.0.50727
Сам кодю на VB (6.0 (почти забросил), 7.1, 8.0)
PM WWW   Вверх
-ser-
Дата 28.9.2005, 04:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 1.2.2005

Репутация: 5
Всего: 13



поcмотрите PerformanceCounter из System.Diagnostics


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
-ser-
Дата 28.9.2005, 04:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 1.2.2005

Репутация: 5
Всего: 13



или используя WMI через System.Management

Код

using System;
using System.Diagnostics;
using System.Threading;
using System.Timers;
using System.Management;

namespace ConsoleApp_Processor
{
    class Processor
    {
        System.Timers.Timer aTimer;
        ManagementObject pRawProc;
        decimal prpct;
        ulong prevCountBase = 0;
        ulong newCountBase = 0;
        ulong prevCountTime = 0;
        ulong newCountTime = 0;

        public Processor( string instance )
        {
            aTimer = new System.Timers.Timer();
            aTimer.Elapsed += new ElapsedEventHandler( this.OnTimer );
            // set interval to 3 sec.
            aTimer.Interval = 3000;
            aTimer.Enabled = true;
            aTimer.AutoReset = false;
        
            // Using Raw Processor performance counters
            
            pRawProc = new
            ManagementObject( "Win32_PerfRawData_PerfOS_Processor.Name='" + instance + "'" );
            Console.Write( "Processor %\n----------------- " );
        }


        public void OnTimer( Object source, ElapsedEventArgs e )
        {
            //PercentProcessorTime use timer algorithm PERF_100NSEC_TIMER_INV 100*(1-(X1-X0)/(Y1-Y0))
            
            pRawProc.Get();
            newCountTime = ( ulong )pRawProc.Properties[ "PercentProcessorTime" ].Value;
            newCountBase = ( ulong )pRawProc.Properties[ "Timestamp_Sys100Ns" ].Value;
            decimal pptd = Convert.ToDecimal( newCountTime );
            decimal pptde = Convert.ToDecimal( prevCountTime );
            decimal ppbd = Convert.ToDecimal( newCountBase );
            decimal ppbde = Convert.ToDecimal( prevCountBase );
            prpct = 100 * ( 1 - ( pptde - pptd ) / ( ppbde - ppbd ) );
            Console.WriteLine( "{0:f3}", prpct );
            prevCountBase = newCountBase;
            prevCountTime = newCountTime;
            System.Timers.Timer theTimer = ( System.Timers.Timer )source;
            theTimer.Enabled = true;
        }

        public void Close()
        {
            pRawProc.Dispose();
        }
       
    }

    class Program
    {
        static void Main( string[] args )
        {
            string instance = "_total";

            Processor pp = new Processor( instance );
            Console.WriteLine( "Press \'q\' to quit the sample" );
            while( Console.Read() != 'q' )
            {
                Thread.Sleep( 2000 );
            }
            pp.Close();
        }
    }
}



--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
sindi8
Дата 28.9.2005, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 6.6.2005
Где: Москва

Репутация: нет
Всего: нет



-ser-, с первым у меня ничего дельного не получилось - не смог найти нормального описалова, а второй - то что надо. Спасибо за помощь.

Это сообщение отредактировал(а) sindi8 - 29.9.2005, 12:33
PM MAIL   Вверх
sindi8
Дата 29.9.2005, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 6.6.2005
Где: Москва

Репутация: нет
Всего: нет



С первым вариантом тоже разобрался. Нужно задавать параметрам следующие значения:
Код

cpuUsage = new PerformanceCounter();
cpuUsage.CategoryName = "Processor";
cpuUsage.CounterName = "% Processor Time";
cpuUsage.InstanceName = "_Total";

PM MAIL   Вверх
lucyk
Дата 12.12.2007, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 5.5.2007
Где: Украина, Днепропе тровск

Репутация: нет
Всего: 1



У меня выдает ошибку:

Error    1    The type or namespace name 'Management' does not exist in the namespace 'System' (are you missing an assembly reference?)    F:\MyDocuments\dev\C#\EOM\ConsoleApplication1\ConsoleApplication1\Program.cs    5    14    ConsoleApplication1

Подскажите плиз как исправить, я новичек.
PM MAIL ICQ   Вверх
lucyk
Дата 12.12.2007, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 5.5.2007
Где: Украина, Днепропе тровск

Репутация: нет
Всего: 1



как мне извлечь загрузку проца из PerformanceCounter?
PM MAIL ICQ   Вверх
informatik
Дата 14.12.2007, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 4.11.2007

Репутация: нет
Всего: 6



Цитата(lucyk @ 12.12.2007,  19:33)
У меня выдает ошибку:

Error    1    The type or namespace name 'Management' does not exist in the namespace 'System' (are you missing an assembly reference?)    F:\MyDocuments\dev\C#\EOM\ConsoleApplication1\ConsoleApplication1\Program.cs    5    14    ConsoleApplication1

Подскажите плиз как исправить, я новичек.


Тебе нужно подключить пространство имен  - using System.Diagnostics;

Это сообщение отредактировал(а) informatik - 14.12.2007, 21:51
--------------------
namespace informatik
PM MAIL   Вверх
lucyk
Дата 15.12.2007, 04:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 5.5.2007
Где: Украина, Днепропе тровск

Репутация: нет
Всего: 1



Оно подключено. Я просто скопировал выложенный здесь код, и компилятор ругается на него...
С Performancecounter'ом уже разобрался
PM MAIL ICQ   Вверх
QryStaL
Дата 15.12.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 14
Всего: 32



lucyk, правой кнопкой на References, делаешь Add Reference, выбираешь сборку System.Management.dll


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
lucyk
Дата 15.12.2007, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 5.5.2007
Где: Украина, Днепропе тровск

Репутация: нет
Всего: 1



Большое спасибо! Теперь разобрался, все работает.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1389 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.