Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить размер оперативки компа?


TStas ©   (2008-02-04 22:00:00) 

Надо это вот зачем. Есть приложение, которому реально нужно дохрена памяти. Понятно, что бесконечно все равно не получится. А от использования файла подкачки начнет тормозить, притом сильно. Вот, если используемая память заведомо меньше оперативки, тогда подкачка будет использоваться редко, если вообще будет. А для этого ее надо как-то получить.


Loginov Dmitry   (2008-02-06 00:16:00) [1]

Но это ни в коем случае не страхует от EOutOfMemory, если ты попытаешься выделить очень большой непрерывный блок памяти.


Loginov Dmitry   (2008-02-06 00:13:00) [2]

Используй такую функцию:

function AvailMemory: Double;
var
 MemInfo: TMemoryStatus;
begin
 MemInfo.dwLength := Sizeof(MemInfo);
 GlobalMemoryStatus(MemInfo);
 Result := Min(MemInfo.dwAvailPhys +
   Int64(MemInfo.dwAvailPageFile), Int64(MemInfo.dwAvailVirtual));
end;


хам   (2008-02-04 22:48:00) [3]

VOID GlobalMemoryStatus(

   LPMEMORYSTATUS lpBuffer  // pointer to the memory status structure  
  );


Parameters

lpBuffer

Points to a MEMORYSTATUS structure in which information about current memory availability is returned. Before calling this function, the calling process should set the dwLength member of this structure.


TStas   (2008-02-04 22:45:00) [4]

Вопрос снят. Вот так:
Procedure GetMemSize(out TotalSize, AvailSize: Integer);
Procedure GetMemSize(out TotalSize, AvailSize: Integer);
var
 Status: _MEMORYSTATUS;
begin
 GlobalMemoryStatus(Status);
 TotalSize := Status.dwTotalPhys;
 AvailSize := Status.dwAvailPhys;
end;

Function TotalByteSize: Integer; //Размер в байтах
var
 X: Integer;
begin
 GetMemSize(Result, X);
end;
Только я не совсем понял, что подразумевается под доступной памятью, но заметил, что её объем меняется.


Наверх

Титульная страница Поиск, карта сайта Написать письмо