У нас есть довольно сложное приложение Delphi, в котором используются сборки .NET. Мы используем FastMM в качестве нашего диспетчера памяти.Приложение для рабочего стола Delphi для Windows -> 513 МБ использования памяти при запуске -> 32.1 МБ после 50 минут незанятого состояния
Мы использовали исключения EOutOfMemory. Поэтому я уже некоторое время изучаю это. Мы подозревали, что у нас есть круговые ссылки между объектами Delphi. Или, возможно, некоторые .NET-объекты, содержащие ссылки на объекты Delphi, не позволяя им быть выпущенными.
До сих пор я не нашел ничего, что мы могли бы изменить на нашем конце, что действительно расстраивает, потому что, очевидно, у нас есть проблема где-то.
Но сегодня по чистой случайности я кое-что обнаружил. Когда наше приложение запускается, диспетчер задач сообщает ca. 513 МБ Используемая память. Я только что запустил его, но мне пришлось отправиться на обед. Когда я вернулся, случайно, я заметил, что приложение теперь использует только 75 МБ. Странно я думал, должно быть, разбился или что-то, что я предполагал. Нет, совсем нет, приложение функционировало отлично. Что я наделал -> Ничего. Просто позвольте ему работать без дела. Наше приложение представляет собой приложение для настольных компьютеров. Не много происходит, пока он находится в режиме ожидания.
Итак, я затем начал смотреть дальше. Воспроизводимость. Потребление памяти начинает уменьшаться в больших прыжках по прошествии времени. После ок. 50 минут он достиг 32,1 МБ !!!
Я контролировал счетчики производительности сборщиков .NET Garbage и не было никаких больших изменений. Поэтому я подозреваю, что проблема заключается в стороне Delphi ->, которая указывает на FastMM.
Я не специалист по FastMM. Я убедился, и FullDebugMode не включен. Кто-нибудь еще испытал что-то подобное? Любые подсказки/идеи, которые могут быть неправильно сконфигурированы в FastMM?
Спасибо, миллион!
@DavidHeffernan У вас, похоже, много опыта работы с менеджерами Delphi-Memory. :-). Был бы очень благодарен, если бы вы могли прокомментировать, если у вас был подобный опыт. Спасибо! – santiagoIT
Здесь вы не можете задавать вопросы конкретным пользователям, и вы не можете их пинговать с помощью @ notation, если только они не комментировали первый или не комментируют их ответ. Это не сайт для социальных сетей, и вы не получаете персональную техническую поддержку от вашего предпочтительного пользователя. –
@KenWhite Спасибо за информацию! Хорошо знать. Ну, надеюсь, он столкнется с этим вопросом.Я знаю из других вопросов о том, что Дэвид использует свой собственный MemoryManager и попробовал несколько вариантов. Поэтому его вклад был бы весьма ценным. – santiagoIT