Перетащите представление на большой холст со многими объектами - PullRequest
2 голосов
/ 13 февраля 2012

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

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

Мне нужно улучшить эту покупку, я не уверен, как прогрессировать.

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

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

1 Ответ

0 голосов
/ 13 февраля 2012

Оптимизация производительности не является "взломом".Большая оптимизация часто подразумевает разделение на части, чтобы можно было управлять производительностью, а это требует усилий.

Ваше предложение звучит разумно, но задержка, которую вы получаете, вероятно, все равно произойдет, когда вы "уроните" свой предмет и обновите холст.Другой подход может заключаться в создании «виртуализированного» холста, который рисует только то, что в данный момент отображается на экране.Это достаточно сложная задача, и я бы не стал приводить здесь пример, но это, вероятно, повысит производительность отрисовки вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...