Мы разрабатываем корпоративное приложение, которое кэширует множество данных с задней стороны. Пользователям разрешено открывать произвольное количество окон приложений, и каждый загружает свои собственные данные и кэширует их. Чтобы каким-то образом управлять потреблением памяти и снижать общую производительность ОС, мы решили написать диспетчер кэша, который будет автоматически отслеживать размер памяти приложения и удалять данные из кеша, когда это необходимо.Стратегия управления потреблением памяти
Таким образом, проблема заключается в том, что нам трудно определить, пришло время освободить память. В настоящее время мы используем очень простой подход - мы просто начинаем отбрасывать материал из кеша, когда использование памяти приложения превышает 80% физической памяти.
Существуют ли какие-либо (альтернативные?) Установленные методы для решения такой проблемы?
По имеющейся физической памяти я имею в виду свободную память. Я знаю, что GC не может быть полностью доверен, когда дело доходит до своевременного удаления объектов, но пока во время наших тестов это не было проблемой. Кроме того, отдельные окна размещаются в одном оконном процессе, поэтому нет необходимости беспокоиться о совместном использовании кеша между ними. Как сигнал ОС относительно низкой памяти? Есть ли способ перехватить этот сигнал в .Net? –
Для этого есть API: https://msdn.microsoft.com/en-us/library/windows/desktop/aa366541(v=vs.85).aspx Но то, что Windows считает «низким», может быть не таким, как вы хотеть. Это произвольный порог; Если вы говорите: «Мы потребляем до 80% свободной памяти», тогда память больше не свободна. Так что определение не имеет смысла. Вы меняете знаменатель, потребляя память. – usr
Извините, я плохо отношусь к заявлению об использовании памяти. Я исправил это в вопросе. –