Ответ 1
вы найдете много связанных вопросов о переполнении стека, однако не все из них упоминают, что одним из наиболее эффективных способов рисования больших объемов данных на экран является использование WriteableBitmap API. Я предлагаю взглянуть на WriteableBitmapEx проект с открытым исходным кодом на codeplex. Раскрытие информации, я внес свой вклад в это один раз, но это не моя библиотека.
Проведя эксперименты с DrawingVisual, StreamGeometry, OnRender, Canvas, все это упадет, как только вы должны нанести 1000 или более "объектов" на экран. Существуют методы, которые касаются виртуализации холста (есть миллионная демонстрация с виртуализированным холстом), но даже это ограничивается видимостью ~ 1000 в одно время до замедления. WriteableBitmap позволяет получить доступ к растровому изображению напрямую и нарисовать его (стиль oldskool), что означает, что вы можете нарисовать десятки тысяч объектов со скоростью. Вы можете реализовать свои собственные оптимизации (многопоточность, уровень детализации), но обратите внимание, что вы не получаете излишних излишеств с этим API. Вы буквально сами делаете работу.
Однако есть одно предостережение. В то время как WPF использует процессор для тесселяции /GPU для рендеринга, WriteableBitmap будет использовать процессор для всего. Поэтому скорость заполнения (количество пикселей, отображаемых на кадр) становится узким местом в зависимости от мощности вашего процессора.
В противном случае, если вам действительно нужна рендеринг высокой производительности, я бы предложил взглянуть на SlimDX (управляемый DirectX) и взаимодействие с WPF. Это даст вам максимальную производительность, так как он будет напрямую использовать графический процессор.
С уважением,