WPFcanvasPerformance–多次调用children.add像冻结它们这样的性能调优做得很好。这显着提高了性能,但仍然需要几秒钟才能将几千个项目加载到画布中。我分析了该应用程序,看起来每次调用canvas.children.add()都占用了很大一部分时间。我已经读到这应该是一个轻量级调用,因为我在一个方法中多次调用它并且它不应该尝试在中间做任何繁重的事情......是否有任何其他原因可能会这样很多时间?有什么办法可以加快速度吗?性能并不糟糕,但我担心以后当我需要处理更大的数据集时它可能会成为一个更大的问题。仅供参考,在此示例中它似乎被调用了1400次,并且在现代/快速笔记本电脑上占用了将近3秒的CPU时间。画布包含在其他控件的层次结构中,所以我很好奇它们是否对此有所贡献。额外说明:我也没有在画布上设置特定高度,因为它被设置为填充网格父容器。这可能是问题的根源吗?主要问题是Children.Add始终是一个缓慢的操作,即使您使用StreamGeometry对象也是如此。我最近遇到了同样的问题并得出以下结论:如果将一堆对象放入新画布并将它们嵌入到主画布中,添加操作的性能将显着提高。因此,不是添加1400个元素,而是将200个元素放在7个画布中,然后将这7个画布添加到主画布中。由于所有对象现在都属于不同的画布,因此您需要稍微调整您的应用程序,但这比使用DrawingVisual等替代解决方案问题要小。只需添加到画布所在的控件层次结构和画布的高度:无论您添加什么子项,画布总是占用尽可能多的空间——它永远不会触发对其父项的新Measuer/Arrange传递。因此,无论您在画布内做什么,都不会影响它包含的可视化树。总而言之-问题不可能来自那里,关于StreamGeomatry的建议是完全正确的-这就是导致性能问题的原因,切换到streamgeormatry将解决它。我建议您将形状直接绘制到图像中,而不是将它们添加为子项。渲染孩子是昂贵的(如您所见)。还有一些类似的问题,我参考了一些有用的文章:如何在0.5秒内用WPF绘制数万个点?以上就是C#学习教程:WPFcanvas性能-多次调用children.add共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
