我有一个WPF应用程序,它很慢。WPF:缓慢的模板实例
它是不是的渲染。首先,渲染非常简单,其次,我用WPF性能工具包来查看 - 没有任何东西。
这是不是在我自己的代码。首先,单元测试工作速度很快,其次,如果我将所有DataTemplates替换为空白,则一切工作都很快。
到目前为止,它看起来像缓慢的部分是模板实例化。也就是说,当你启动应用程序并打开一些复杂的屏幕时,需要很多的时间。并且“很多”我的意思是“很多”。有时可能需要3-5秒 - 例如,当存在一个包含100行的数据网格时。但是,当你转到另一个选项卡,然后返回到同一个屏幕时,它会快速打开(只要它的视图模型保持放置状态)。
这很烦人,不仅因为它很慢,而且因为我对此无能为力。如果我有过一些缓慢控制,我可以,也许,显示一些“开放,请稍候”消息或东西...
此外,当我看一些其他的WPF应用程序(最值得注意的是,ILSpy)尽管数据量很大,但他们似乎工作得相当快。这让我相信我可能做错了什么。但我不知道从哪里开始。
任何想法?任何经典错误?有小费吗?
你想知道和做出有教育的猜测是什么问题。不要怀疑。不要猜测,也不要指望Performance Toolkit告诉你。 [这是如何找出。](http://stackoverflow.com/questions/375913/what-can-i-use-to-profile-c-code-in-linux/378024#378024) – 2011-04-26 13:58:30
@Mike:是,我广泛使用这种原始采样技术,并且在普遍性能下降时帮助我很多。但在这种情况下,我只是没有足够的时间来停止执行,因为性能下降最多只能持续3-5秒。另外,在我设法阻止它的极少数情况下,它总是停留在WPF的内核中。我也追求这个线索(在ILSpy的帮助下),但到目前为止,它看起来很无望。因此,我的问题更多的是与WPF相关的问题。 – 2011-04-26 16:52:05
对。它停在WPF的内核中,但是堆栈上有什么?堆栈中的每一行都负责这段时间。我曾经有人说过“哦,每次我停止它,它都在一些迭代器中,那有什么好处?”答案是*很棒*,现在只需查看堆栈,就会发现问题。如果你猜猜问题是什么,那么它会告诉你,如果你是对的,如果你错了,它会告诉你什么是正确的问题。 – 2011-04-26 20:51:27