Предотвращение сборки мусора .NET на короткий период времени

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

Мои вопросы:

  1. Можно ли на короткое время приостановить сборку мусора для всей программы?
  2. Это возможно. можно использовать System.GC. Collect () для принудительной сборки мусора перед окном, которое мне нужно освободить от сборки мусора, и если я это сделаю, как долго я буду свободен от сборки мусора?
  3. Какой совет люди могут дать по минимизации необходимости в сборке мусора в целом?

Примечание. Эта система довольно сложна и состоит из множества различных компонентов. Я надеюсь избежать подхода, при котором мне придется реализовать собственный интерфейс IDisposable для каждого класса программы.

63
задан casperOne 15 May 2011 в 01:29
поделиться