Основным недостатком вашего дизайна является то, что привязывая к ObservableCollection, вы заставляете пользовательский интерфейс отображать каждый элемент, который добавляется в список (возможно, тысячи) - даже если в конце обработки есть только 10 элементов, которыенеобходимо отобразить.
Я увидел огромные улучшения, изменив ObservableCollection на List и обновив DataGrid вручную в конце обработки - таким образом, пользовательский интерфейс должен обрабатывать только 10 элементов.Я обнаружил, что это изменение привело к увеличению производительности на 50%, а также к тому, что пользовательский интерфейс стал реагировать на 100% во время обработки списка.
Если вы обрабатываете список в течение длительного времени и вам необходимопоказать живые изменения, вы можете обновить DataGrid каждые 100 элементов.Это будет показывать результаты с точностью около 0,5 секунды, которая должна быть достаточно близкой.