Перетаскивание производительности на большом холсте с множеством объектовC#

Место общения программистов C#
Ответить
Anonymous
 Перетаскивание производительности на большом холсте с множеством объектов

Сообщение Anonymous »

У меня есть большой холст со множеством объектов, который можно прокручивать (вот почему он такой большой).
У меня есть объекты, которые я помещаю на экран, которые можно щелкать и перетаскивать (например, текстовое поле). Объект просто захватывает мышь и вызывает Canvas.SetLeft() и SetTop() при вызове события OnMouseMoved.

Это отлично работает с холстами меньшего размера, но этот действительно большой холст с несколькими тысячами объектов обновляет перетаскиваемый объект очень медленно... обычно обновление происходит более секунды при его перетаскивании. . не очень удобный для пользователя.

Мне нужно улучшить эту покупку, и я не знаю, как это сделать.

Одна из моих мыслей заключалась в том, чтобы оставить на переднем плане прозрачный холст, который имеет только текущий размер окна и не содержит дочерних элементов. Когда начнете перетаскивать, переместите его на этот слой до завершения и верните обратно на большой. Однако потребовалось много усилий для еще одного взлома...

Обновление: используя перфоратор, я вижу, что на холсте неоднократно выполняется проход макета, пока я перетаскиваю этот объект, и это это медленная часть. Интересно, есть ли способ избежать этого...

Подробнее здесь: https://stackoverflow.com/questions/926 ... ny-objects
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»