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