![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить размер оперативки компа?
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;
Только я не совсем понял, что подразумевается под доступной памятью, но заметил, что её объем меняется.