У меня есть высокопроизводительное приложение, которое обрабатывает очень большой объем данных. Он получает, анализирует и отбрасывает огромное количество информации за очень короткие промежутки времени. Это вызывает значительное количество оттока объектов, которые я в настоящее время пытаюсь оптимизировать, но также вызывает вторичную проблему. Когда сборка мусора в ней может вызвать некоторые длительные задержки, так как она очищает вещи (длинным я имею в виду от 10 до 100 миллисекунд). В 99% случаев это приемлемо, но для кратких окон времени около 1-2 минут я должен быть абсолютно уверен, что сбор мусора не вызывает задержки. Я знаю, когда эти периоды времени будут происходить заранее, и мне просто нужен способ убедиться, что сбор мусора не произойдет в течение этого периода. Приложение написано на С# с использованием .NET 4.0 Framework и использует как управляемый, так и неуправляемый код, если это имеет значение.
Мои вопросы:
- Можно ли кратко приостановить сбор мусора для всей программы?
- Можно ли использовать System.GC.Collect() для принудительного сбора мусора перед окном, в котором я нуждаюсь, без сбора мусора, и если я сделаю, как долго я буду свободным от мусора?
- Какой совет у людей есть для минимизации потребности в сборке мусора в целом?
Примечание. Эта система довольно сложна с множеством различных компонентов. Я надеюсь избежать подхода, когда я должен реализовать пользовательский интерфейс IDisposable для каждого класса программы.