在具有许多对象的大型画布中拖动性能

时间:2012-02-13 17:41:39

标签: c# wpf performance xaml

我有一个大型画布,上面有很多物体,可滚动(因此它的大小如此之大)。 我在屏幕上放置了可以单击并拖动的对象(例如,文本框)。对象只是捕获鼠标,并在调用OnMouseMoved事件时调用Canvas.SetLeft()和SetTop()。

这适用于较小的画布,但这个非常大的一个有几千个对象非常缓慢地刷新被拖动的对象...通常在拖动它的同时刷新一秒钟。用户不太友好。

我需要改进这个购买我不知道如何进步。

我想到的是,在前景中保留一个透明画布,它只是当前窗口大小而不包含子画面。当开始拖动时,将其移动到此图层直到完成并将其移回到大图层。为了又一次破解而付出了很多努力......

更新:使用穿孔器,我看到画布正在重复执行布局传递,而我拖动此对象,这是缓慢的部分。想知道是否有办法避免这种情况......

1 个答案:

答案 0 :(得分:0)

性能优化不是“黑客攻击”。大优化通常涉及将事情分开,以便可以管理性能 - 这需要付出努力。

你的建议听起来很合理,但当你“掉落”你的物品并且画布刷新时,你可能仍然会遇到滞后现象。另一种方法可能是创建一个“虚拟化”画布,仅绘制当前屏幕上的内容。这是一项复杂的任务,我不打算在这里提供一个示例 - 但它可能会有利于整个应用程序的绘制性能。