Re: Как узнать загрузку процессора на удаленном компе?
От: NoOneKnows  
Дата: 06.08.07 15:02
Оценка: 3 (1)
Здравствуйте, eccentric, Вы писали:

E>Подскажите, как программно узнать загрузку процессора в данный момент времени на удаленном компе?


Прикольная штука: Performance Counters... В довеску также посмотрим, сколько там у боса памяти доступно, че мелочиться ?

Пишем такой код :

public class CpuRamCounter
{
    protected PerformanceCounter _cpuCounter;
    protected PerformanceCounter _ramUsage;

    public CpuRamCounter(string remoteHostName)
    {
        _cpuCounter = new PerformanceCounter("Processor", "% Processor Time", 
            "_Total", remoteHostName );
        _ramUsage = new PerformanceCounter("Memory", "Available MBytes", string.Empty, remoteHostName);
    }

    public float GetCpuUsage()
    {
        return _cpuCounter.NextValue();
    }

    public float GetRamMbAvailable()
    {
        return _ramUsage.NextValue();
    }
}


Идея ясна? Дальше дело за малым. Вот пример использования:

public static void Main(string[] args)
{
    Console.Write("Enter remote machine name or IP (e.g. 127.0.0.1): ");
    string remoteHostName = Console.ReadLine();
    try
    {
        CpuRamCounter remoteCpuRam = new CpuRamCounter(remoteHostName);
        Console.WriteLine("Remote CPU usage is: {0}%", remoteCpuRam.GetCpuUsage());
        Console.WriteLine("Remote RAM Available: {0} Mb", remoteCpuRam.GetRamMbAvailable());
    }
    catch(UnauthorizedAccessException)
    {
        Console.WriteLine("Code that is executing without administrative " + 
                          "privileges attempted to read a performance counter.");
    }
    catch(Win32Exception ex)
    {
        Console.WriteLine("An error occurred when accessing a system API.");
        Console.WriteLine("Details:" );
        Console.WriteLine(ex.Message);
    }
    catch(PlatformNotSupportedException)
    {
        // Ну и ну! У боса стоит старенькая винда...
        Console.WriteLine("The platform is Windows 98 or Windows " + 
                        "Millennium Edition (Me), which does not support performance counters.");
    }
    catch(InvalidOperationException)
    {
        Console.WriteLine("The instance is not correctly associated with a performance counter.");
        Console.WriteLine("Wrong remote host name?");
    }
}


Мм... Одна маленька деталь. Процесс, который выполняет этот код должен иметь доступ к счетчикам производительности удаленного хоста. Т.е. в следующий раз когда пойдете к шефу, не забудьте, например, добавить своего пользователя в группу администраторы ...
С уважением, Рамиль Сам Ду Нар.
Почти самый отрицательный
Автор: NoOneKnows
Дата: 08.06.06
РСДНовец.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.