Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF tabswitch/render花费太多时间_Wpf_Performance_Drawing - Fatal编程技术网

WPF tabswitch/render花费太多时间

WPF tabswitch/render花费太多时间,wpf,performance,drawing,Wpf,Performance,Drawing,我有一个WPF应用程序,有许多选项卡。。 在一个选项卡中。。我画了一幅非常复杂的矢量图,由成千上万的图形视觉组成。。(这表示一台机器,所有元素都需要可交互.) 第一次画这个需要3/4秒。第一次画完后,应该完成 问题是,如果我切换到另一个选项卡并返回,至少需要2,3秒才能再次显示带有绘图的选项卡页。。既然没有重画,为什么要花这么多时间?如果组件不打算更改,您可以调用组件上的Freeze(),将其标记为完成。如果不尝试一下,我不知道这是否有帮助,但你可以试一试 并非所有对象都是可自由释放的。有关更多

我有一个WPF应用程序,有许多选项卡。。 在一个选项卡中。。我画了一幅非常复杂的矢量图,由成千上万的图形视觉组成。。(这表示一台机器,所有元素都需要可交互.) 第一次画这个需要3/4秒。第一次画完后,应该完成


问题是,如果我切换到另一个选项卡并返回,至少需要2,3秒才能再次显示带有绘图的选项卡页。。既然没有重画,为什么要花这么多时间?

如果组件不打算更改,您可以调用组件上的
Freeze()
,将其标记为完成。如果不尝试一下,我不知道这是否有帮助,但你可以试一试

并非所有对象都是可自由释放的。有关更多信息,请查看MSDN文档:

您可以尝试的另一件事是将矢量艺术渲染为位图,并显示该位图。也许失去矢量精度会让你觉得恶心,但如果你知道它不会改变,而且看起来会一样,那又有什么害处呢?(如果您支持打印或需要高分辨率版本的内容,则始终可以切换回该操作。)有关如何将UIElement转换为位图的信息,请查看:

另一种可能的解决方案:您并没有真正解释您正在与元素进行何种交互,但如果您只想进行缩放和平移,则
渲染转换
可能就足够了(这比
布局转换
和/或单独移动所有元素更有效)。我还没有尝试过将
Freeze()
RenderTransform
相结合,但是您可以在减少布局WPF所需工作量的同时获得所需的缩放效果。

谢谢您的回答。。net4中的bitmapcache可以解决这个问题。但应用程序要求图形应可无限缩放,以便操作员可以通过放大查看机器的更精细细节。在bitmapcache的情况下,我们对缩放有限制,超过该限制,图形将被像素化。。无论如何,我想知道为什么tabswitch需要花费时间,因为它已经被渲染了,当我们切换tab并返回时,没有必要再次绘制..我不确定为什么第二次渲染似乎需要更长的时间,但是如果这是第一个出现的窗口,当窗口打开时,WPF布局引擎正在绘制一些图形,所以第一个布局看起来更短?唯一知道的方法就是测量它。有没有想过如何加速它?没有。。wpf4中的bitmapcache很好。。但是它不能应用在我们的场景中..可能会对您有所帮助。。