При вызове функции TerminalInfoInteger ( TERMINAL_MEMORY_TOTAL ) и TerminalInfoInteger ( TERMINAL_MEMORY_AVAILABLE )
терминал выдает значения, которые в 2 раза превышают объем физической памяти компьютера, при этом в системе отключен pagefile.sys для сброса данных оперативной памяти на диск, соответственно такого объема даже со свопом нет в доступе для терминала.
Тестировал на 3х машинах с 8 Gb оперативной памяти (виртуалка VMWare), с 16 Gb ( не виртуалка ) и 32 Gb ( не виртуалка )
Операционная система Windows 2008 R2 Datacenter
Версии терминала 5.00 build 2815 и 5.00 build 2833
Подскажите, может есть какая-либо другая функция для определения свободной памяти для эксперта, чтоб не получать отказ в выделении памяти для массива?
Первое приближение можно получить как TERMINAL_MEMORY_PHYSICAL - TERMINAL_MEMORY_USED
Первое приближение можно получить как TERMINAL_MEMORY_PHYSICAL - TERMINAL_MEMORY_USED
Благодарю, конечно, за ответ, но это не дает никакой информации о том, сколько занято памяти другими программами в системе.
Пока я сделал костыль в виде цикла от как раз этой цифры ( TERMINAL_MEMORY_PHYSICAL - TERMINAL_MEMORY_USED ), в котором происходит выделение памяти под массив, уменьшая каждый раз значение на Гигабайт при невозможности выделить память, как только память выделяется успешно -> заносим это значение в переменную, как значение свободной памяти и делаем ArrayFree для массива.
Но это как-то не серьезно, когда нужно часто проверять доступную память, т.к. само выделение памяти под временный массив занимает время.Благодарю, конечно, за ответ, но это не дает никакой информации о том, сколько занято памяти другими программами в системе.
Пока я сделал костыль в виде цикла от как раз этой цифры ( TERMINAL_MEMORY_PHYSICAL - TERMINAL_MEMORY_USED ), в котором происходит выделение памяти под массив, уменьшая каждый раз значение на Гигабайт при невозможности выделить память, как только память выделяется успешно -> заносим это значение в переменную, как значение свободной памяти и делаем ArrayFree для массива.
Но это как-то не серьезно, когда нужно часто проверять доступную память.А если не выделилось из-за фрагментации свободной памяти? Или она как-то дефрагментируется?
А если не выделилось из-за фрагментации свободной памяти? Или она как-то дефрагментируется?
В Windows 7 и выше эта проблема решена и ей занимается менеджер памяти операционной системы, на сколько я помню.
Там же пользователю даются виртуальные адреса, а не физические, физически память может быть и фрагментирована, а для пользователя это не видно и ему показывается непрерывный кусок памяти с адресацией по порядку от начала до конца.В Windows 7 и выше эта проблема решена и ей занимается менеджер памяти операционной системы, на сколько я помню.
Там же пользователю даются виртуальные адреса, а не физические, физически память может быть и фрагментирована, а для пользователя это не видно.А МТ отдаёт освобождённую память в систему, не сам управляет?
При вызове функции TerminalInfoInteger ( TERMINAL_MEMORY_TOTAL ) и TerminalInfoInteger ( TERMINAL_MEMORY_AVAILABLE )
терминал выдает значения, которые в 2 раза превышают объем физической памяти компьютера, при этом в системе отключен pagefile.sys для сброса данных оперативной памяти на диск, соответственно такого объема даже со свопом нет в доступе для терминала.
Тестировал на 3х машинах с 8 Gb оперативной памяти (виртуалка VMWare), с 16 Gb ( не виртуалка ) и 32 Gb ( не виртуалка )
Операционная система Windows 2008 R2 Datacenter
Версии терминала 5.00 build 2815 и 5.00 build 2833
Подскажите, может есть какая-либо другая функция для определения свободной памяти для эксперта, чтоб не получать отказ в выделении памяти для массива?
Поставте Windows XP ...
А если серьёзно то пользуйтесь актуальной операционной системой с последними обновлениями.
Поставте Windows XP ...
А если серьёзно то пользуйтесь актуальной операционной системой с последними обновлениями.
Как это относится к теме ветки? Пожалуйста придерживайтесь темы. У меня не было вопроса о том, какую операционную систему мне использовать.
Есть конкретная проблема и ее нужно решить, по другим вопросам пожалуйста создавайте отдельную тему и там обсуждайте или найдите существующую тему в которой можете поговорить о наболевшем.Благодарю, конечно, за ответ, но это не дает никакой информации о том, сколько занято памяти другими программами в системе.
Пока я сделал костыль в виде цикла от как раз этой цифры ( TERMINAL_MEMORY_PHYSICAL - TERMINAL_MEMORY_USED ), в котором происходит выделение памяти под массив, уменьшая каждый раз значение на Гигабайт при невозможности выделить память, как только память выделяется успешно -> заносим это значение в переменную, как значение свободной памяти и делаем ArrayFree для массива.
Но это как-то не серьезно, когда нужно часто проверять доступную память, т.к. само выделение памяти под временный массив занимает время.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
При вызове функции
TerminalInfoInteger ( TERMINAL_MEMORY_TOTAL ) и
TerminalInfoInteger ( TERMINAL_MEMORY_AVAILABLE )
терминал выдает значения, которые в 2 раза превышают объем физической памяти компьютера, при этом в системе отключен pagefile.sys для сброса данных оперативной памяти на диск, соответственно такого объема даже со свопом нет в доступе для терминала.
Тестировал на 3х машинах: с 8 Gb оперативной памяти (виртуалка VMWare), с 16 Gb ( не виртуалка ) и 32 Gb ( не виртуалка )
Операционная система Windows 2008 R2 Datacenter
Версии терминала 5.00 build 2815 и 5.00 build 2833
Подскажите, может есть какая-либо другая функция для определения свободной памяти для эксперта, чтоб не получать отказ в выделении памяти для массива?