Форум: "Система";
Текущий архив: 2002.07.29;
Скачать: [xml.tar.bz2];
ВнизПроизводительность Win2000 Найти похожие ветки
← →
Igor345 (2002-04-30 03:47) [0]Уважаемы Знатоки и Магистры! Помогите разобраться, как мне в Delphi из ключа HKEY_PERFORMANCE_DATA получить инф. по производительности?
← →
PGM (2002-04-30 11:45) [1]Еще под НТ для этих целей я использовал библиотеку PSAPI.DLL из SDK. Под 2000 она так же отлично работает. Там есть GetPerformanceInfo, которая возвращает значение из реестра как раз того ключа который нуже, а потом его нужно разбирать по кусочкам в поиске конкретного счетчика, который тебе нужен. Там все не очень прозрачно и много кода. Вот основная часть для получения значения ключа.
const
gPerfDataSize : DWORD = 50*1024; // start with 50K
var
gpPerfData : PPERF_DATA;
const
ghPerfKey : HKEY = HKEY_PERFORMANCE_DATA; // get perf data from this key
// GetPerfData
//
// Get a new set of performance data.
//
// *ppData should be NULL initially.
// This function will allocate a buffer big enough to hold the
// data requested by szObjectIndex.
//
// *pDataSize specifies the initial buffer size. If the size is
// too small, the function will increase it until it is big enough
// then return the size through *pDataSize. Caller should
// deallocate *ppData if it is no longer being used.
//
// Returns ERROR_SUCCESS if no error occurs.
//
// Note: the trial and error loop is quite different from the normal
// registry operation. Normally if the buffer is too small,
// RegQueryValueEx returns the required size. In this case,
// the perflib, since the data is dynamic, a buffer big enough
// for the moment may not be enough for the next. Therefor,
// the required size is not returned.
//
// One should start with a resonable size to avoid the overhead
// of reallocation of memory.
//
function GetPerfData ( hPerfKey : HKEY ;
szObjectIndex : LPSTR ;
var ppData : PPERF_DATA;
var pDataSize : DWORD) : DWORD;
var
DataSize : DWORD ;
dwR : DWORD ;
T : DWORD ;
begin
if (ppData = nil) then
ppData := PPERF_DATA( LocalAlloc (LMEM_FIXED, pDataSize));
repeat
DataSize := pDataSize;
dwR := RegQueryValueEx (hPerfKey,
szObjectIndex,
nil,
@T,
PBYTE(ppData),
@DataSize);
if (dwR = ERROR_MORE_DATA) then begin
LocalFree (DWORD(ppData));
pDataSize := pDataSize + 1024;
ppData := PPERF_DATA(LocalAlloc (LMEM_FIXED, pDataSize));
end;
if (ppData = nil) then begin
LocalFree (DWORD(ppData));
Result := ERROR_NOT_ENOUGH_MEMORY;
Exit;
end;
until (dwR <> ERROR_MORE_DATA);
Result := dwR;
end;
← →
PGM (2002-04-30 11:48) [2]Если нужна более подробная информация, то через почту. А то опасаюсь здесь занять слишком много места кодом, а на пальцах объяснять не получится.
← →
cdaDmitriy (2002-04-30 16:05) [3]> PGM
Если можно тестоый пример
← →
PGM (2002-05-04 18:49) [4]Слишком много места займет и конкретных счетчиков очень много. Могу, если интересно, прислать для получения CPU Perfomance (как в TaskManager). Если интересует, пишите.
← →
P_Igorek (2002-05-12 18:48) [5]Hi, Если не сложно, то про производительность CPU и время работы винды. Санкс. P_Igorek
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.07.29;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c