2011-03-11 103 views
0

我有我的Silverlight项目严重的性能问题,当我跑我的项目CPU使用率上升80% - 90%Silverlight性能问题!

计算机下去!!!,这些都是大特色项目:

1-我们使用的Silverlight 4.

3-我们使用MVVM模式,这意味着所有的数据源,状态绑定以及View Model中的属性。

4-大部分控件是在代码中动态创建的。

5-我们有在其中是所有产生的控制的容器主视图模型的主控制一个参考。

6-在我们的控件中,我们有许多布局(栅格)。

7-我们有主视图模型,它是系统中所有儿童视图模型的容器。

8-我们有许多州和动画

9-我们不使用继电器命令,我们使用常规命令和事件,所以我们引发事件并处理它的父项(我们有很多事件)。

以上是否有导致性能问题?我认为Silverlight本身存在问题,是否有任何Silvelight 4性能更新。

我感谢所有帮助,

感谢

+2

没有代码,这是不可能的。尽管如此,我不会那么仓促地责怪Silverlight。首先尝试使用分析器来查看发生了什么。 此外,还有一个巨大的MVVM实现和框架,你在用什么?一个自制的,MVVM Light或Caliburn.Micro等框架,还有其他的吗? – 2011-03-11 11:14:15

+1

你是否通过性能分析器运行你的代码?这会告诉你比我们的猜测更多。如果我不得不猜测,我会开始寻找状态和动画,还要看动态创建控件(即,你是否真的需要所有的一次等) – 2011-03-11 11:15:38

回答

0

一个复杂的应用程序很可能有性能问题需要解决。数据绑定和各种事件的使用虽然对于构建应用程序很有帮助,但却很难看出发生了什么。控制流可能不明显,例如由于级联事件/属性更改,代码可能会执行多次。

我推荐使用探查器来查看哪些消耗CPU时间最多 - JetBrains DotTrace是我用于Silverlight的一种,请参阅other questions了解更多信息。然后你可以专注于问题领域。

如果您的应用程序随着时间的推移逐渐变慢,那么也值得调查是否还有内存泄漏。

0

您是否在任何地方使用DropShadowEffect?在这种情况下,您可能需要尝试删除它们。我曾经遇到过这个问题。一个模板包含一个DropShadowEffect,它可以使CPU最大化,解决了它的问题。

+0

不,我不,谢谢 – Saad 2011-03-11 14:36:41

0

以我的经验,你的第九点通常是罪魁祸首。

确保您在完成类中的事件时释放类中的事件处理程序。在我看到Silverlight或WPF性能下降的几乎所有情况下都是对事件代表的不恰当处理。

作为其中一条评论指出,使用性能分析器,你很可能会看到事件处理程序正在消耗过多的内存数量......这意味着它们在它们应该存在之后仍然存在并回应事件。

因此,性能问题源于许多对象或控件停留在内存中并对事件做出响应。

这是我最好的猜测。

希望它有帮助。