Неверное отображение доступной оперативной памяти для терминала - страница 2

 
Renat Fatkhullin:
Это не костыль, а прямое убийство терминала.

Не делайте так никогда и ни в одной программе

Ок, понял. Тогда резонный вопрос: а как по другому узнать размер доступной памяти для эксперта?

 
Renat Fatkhullin:
Это не костыль, а прямое убийство терминала.

Не делайте так никогда и ни в одной программе

Нашел другой временный рабочий вариант - через DLL функцией GlobalMemoryStatusEx, спасибо Andrey Voytenko

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

//+------------------------------------------------------------------+
//|                                         GlobalMemoryStatusEx.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"


struct MEMORYSTATUSEX
{
   uint               dwLength;
   uint               dwMemoryLoad;
   ulong              ullTotalPhys;
   ulong              ullAvailPhys;
   ulong              ullTotalPageFile;
   ulong              ullAvailPageFile;
   ulong              ullTotalVirtual;
   ulong              ullAvailVirtual;
   ulong              ullAvailExtendedVirtual;
};

#import  "kernel32.dll"
   int   GlobalMemoryStatusEx(MEMORYSTATUSEX& lpBuffer);
   int   GetLastError();
#import
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   MEMORYSTATUSEX mem   = {};
   mem.dwLength         = sizeof( mem );
   
   if( GlobalMemoryStatusEx( mem ) == 0 )
   {
      Print( "Error:", kernel32::GetLastError() );
      return;
   }
   
   PrintFormat( "Result: memory load %d %%", mem.dwMemoryLoad );
   Print( "Memory Total Phys: ",             mem.ullTotalPhys,             " bytes" );
   Print( "Memory Avail Phys: ",             mem.ullAvailPhys,             " bytes" );
   Print( "Memory Total Virtual: ",          mem.ullTotalVirtual,          " bytes" );
   Print( "Memory Avail Virtual: ",          mem.ullAvailVirtual,          " bytes" );
   Print( "Memory Total PageFile: ",         mem.ullTotalPageFile,         " bytes" );
   Print( "Memory Avail PageFile: ",         mem.ullAvailPageFile,         " bytes" );
   Print( "Memory Avail ExtendedVirtual: ",  mem.ullAvailExtendedVirtual,  " bytes" );
}
//+------------------------------------------------------------------+