счетчики производительности

  • Автор темы NetDigger
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

NetDigger

Гость
#1
Здравствуйте, уважаемые!
Возможно ли для отдельного процесса вывести насколько он загружает процессор, сколько байт считал и т.п. информацию, которую возможно извлечь из PDH. Нужно НЕ ДЛЯ МАШИНЫ В ЦЕЛОМ, а ДЛЯ ОТДЕЛЬНО ВЫБРАННОГО ПРОЦЕССА
 
B

Barmutik

Гость
#2
А если попробовать для получения времени GetProcessTimes и GetProcessIoCounters для чтения\записи..

Не уверен что абсолютно то что ты искал ..
 
N

NetDigger

Гость
#3
Хмм, все облазил - в какой модуль подключать для GetProcessIOCounters?
 
B

Barmutik

Гость
#4
А ни в каком ... самому декларить надо...

Да и кстати .. можно обратить внимание ещё на вот эту функцию: NtQuerySystemInformation
 
N

NetDigger

Гость
#5
Что-то вообще траблы большие: не могу я ее корректно экспортировать эту GetProccessIO

IO_COUNTERS = ^_IO_COUNTERS;
_IO_COUNTERS = record
ReadOperationCount: int64;
WriteOperationCount: int64;
OtherOperationCount: int64;
ReadTransferCount: int64;
WriteTransferCount: int64;
OtherTransferCount: int64;
End;


var
Form1: TForm1;
function GetProcessIoCounters(hProcess: THandle; PIO_COUNTERS:pointer):Boolean; stdcall; external 'kernel32.dll';

procedure TForm1.Button1Click(Sender: TObject);
Var
PIDArray: array [0..1023] of DWORD;
cb: DWORD;
I: Integer;
ProcCount: Integer;
hProcess: THandle;
M : IO_COUNTERS;
begin
EnumProcesses(@PIDArray, SizeOf(PIDArray), cb);
ProcCount := cb div SizeOf(DWORD);
getMem( m, sizeof(_IO_COUNTERS));
for I := 0 to ProcCount - 1 do
begin
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or
PROCESS_VM_READ,
False,
PIDArray);
if not(GetProcessIoCounters( hProcess, M)) then Halt;
End;

end;
 
B

Barmutik

Гость
#6
А в чём конретно проблема ?

Я взял Ваш код .. с мелкими модификациями у меня всё чудно работает ...

Вот мой пример для текущго процесса:

Код:
var
hProcess: THandle;
M : _IO_COUNTERS;
begin
hProcess := GetCurrentProcess;
if not GetProcessIoCounters( hProcess, @M) then
 ShowMessage('Error')
else
begin
 Caption := IntToStr(M.ReadOperationCount) + ' ' + IntToStr(M.WriteOperationCount) +
  ' ' + IntToStr(M.ReadTransferCount);
end;
Единственное что ...
Код:
function GetProcessIoCounters(hProcess: THandle; PIO_COUNTERS: IO_COUNTERS):Boolean; stdcall; external 'kernel32.dll';
вместо Вашего объявления
Код:
function GetProcessIoCounters(hProcess: THandle; PIO_COUNTERS:pointer):Boolean; stdcall; external 'kernel32.dll';
 
N

NetDigger

Гость
#7
Прошу прощения - сказывается то, что уже третьи сутки подряд на ногах...Однако с currentProcess действительно все ок - а с остальным не очень. Разберемся. сенкс
 
Статус
Закрыто для дальнейших ответов.