Я работаю разработчиком .NET в торговой фирме, где, как и вы, мы заботимся о задержке в 100 мс. Сборка мусора действительно может стать серьезной проблемой, когда требуется надежная минимальная задержка .
Тем не менее, я не думаю, что переход на C ++ будет разумным шагом, в основном из-за того, как много времени это займет. Сборка мусора происходит после того, как определенное количество памяти было выделено в куче с течением времени. Вы можете существенно смягчить эту проблему , минимизировав количество выделенной кучи, создаваемой вашим кодом.
Я бы порекомендовал попытаться определить методы в вашем приложении, которые ответственны за значительные объемы распределения. Везде, где создаются объекты, будет кандидатом на изменение. Классический подход к борьбе с сборкой мусора использует пулы ресурсов : вместо создания нового объекта при каждом вызове метода, поддерживать пул уже созданных объектов, заимствуя из пула при каждом вызове метода и возвращая объект в пул после завершения метода.
Еще одна простая задача - поиск любых ArrayList
, HashTable
или подобных неуниверсальных коллекций в вашем коде, которые блокируют / распаковывают типы значений, что приводит к совершенно ненужному выделению кучи. Замените их на List<T>
, Dictionary<TKey, TValue>
и т. Д., Где это возможно (здесь я специально имею в виду коллекции типов значений, таких как int
, double
, long
и т. Д.). Аналогично, обратите внимание на любые методы, которые вы можете вызывать, какие аргументы типа значения блока (или возвращаемые типы значений в штучной упаковке).
Это всего лишь пара сравнительно небольших шагов, которые вы можете предпринять, чтобы уменьшить количество сборщиков мусора, но они могут иметь большое значение. При достаточных усилиях можно даже полностью (или, по крайней мере, почти ) исключить все сборок мусора поколения 2 на этапе непрерывных операций (все, кроме запуска и завершения работы) вашего приложения , И я думаю, вы обнаружите, что коллекции второго поколения - настоящие хиты.
Вот документ с изложением усилий одной компании по минимизации задержки в приложении .NET с помощью объединения ресурсов, в дополнение к нескольким другим методам, с большим успехом:
Rapid Addition использует Microsoft .NET 3.5 Framework для создания обработки с минимальной задержкой FIX и FAST
Так что повторюсь: я настоятельно рекомендую изучить способы изменения вашего кода, чтобы сократить сборку мусора вместо преобразования на совершенно другой язык.