Справочная информация:
У меня есть 2 класса A & B. Класс A содержит 1 int64, 1 int, 1 datetime, 6 строк, 1 байт [] и список объектов класса B.
Класс B содержит 2 Int64, 1 перечисление (4 значения), 5 строк.
Классы A и B имеют отношения основной детали между ними. В списке класса A может быть 0 или более объектов класса B.
Эти объекты используются для хранения результатов поиска из нашей базы данных.
У нас есть архитектура SOA. Клиент может выполнять поиск в определенном диапазоне дат и с фиксированным набором критериев. Мы используем их в сервисе для сбора результатов поиска и отправки их клиенту партиями. После отправки каждой партии мы удаляем эти объекты из сервиса.
Проблема:
Если пользователь выполняет поиск, который возвращает результаты 200 тыс. (Объединенные классы A + класс B), потребление памяти сервисом увеличивается на 200 Мб. Но если последующие поиски возвращают только несколько результатов, память не возвращается в прежнее состояние. Когда я смотрю на счетчики производительности для службы, я вижу, что большая часть памяти занята объектами gen2.
Не пытаясь выполнить GC.Collect (), как я могу убедиться, что эта память возвращается быстрее? Я хотя и использовал интерфейс IDisposable в Классе A и Классе B, но, поскольку большинство полей в обоих из них являются строками, я не знаю, как их принудительно утилизировать.