我最近被要求加速C#/ ASP.NET / SQL Server业务应用程序网站。自从我刚开始以来,我对内部的了解并不多。那么我从哪里开始呢?看不见,在这样的系统上影响性能的最重要的一件事是什么?数据库调优?硬件?个人页面优化?你会看到第一个的东西是什么?
编辑:在我实际完成工作后,我会回来发布答案。 ;)
再次编辑:“个人资料”是目前投票最多的答案,我同意这显然是应该做的。但我正在寻找关于分析结果会显示的猜测/经验,所以我认为答案不重要......
答案 0 :(得分:10)
你要看的第一个是什么?
分析器。
答案 1 :(得分:6)
我要做的第一件事是获取JetBrains'dotTrace应用程序的副本,并使用它来分析网站。不要假设性能问题在哪里 - 去找出来!
答案 2 :(得分:5)
我要看的第一件事是数据库,确保索引应该是索引。
答案 3 :(得分:4)
任何事情都可能是问题所在。拍摄一个表现不佳的页面并跟踪控制流程。使用调试器和sql探查器,查看该页面的所有内容。应该清楚要解决的问题。
请记住,从一个页面开始,用户会因为速度慢而感到沮丧。不要打扰其他页面(例如登录页面,这几乎不是问题。)
当然,根据经验,您可以查看代码(DB + .NET)并了解问题所在,但您没有经验。因此,另一种选择是聘请有经验的顾问。
编辑 - 我的猜测(因为我想要一个cookie)
我已经看到了所有这些。
答案 4 :(得分:1)
如果您没有合理地模拟生产性能,使用分析器是一种衡量性能的好方法,但却很棘手。
大多数支持数据库的Web应用程序都受I / O限制,不受计算限制。如果没有分析器,我会猜测查询性能。您可以通过运行解释查询来确定您需要的索引来提高查询性能。或者避免必须通过将结果集/活动记录放入缓存来优化查询。
答案 5 :(得分:1)
对于数据库部分,这是一个很好的开始寻找:
Troubleshooting Performance Problems in SQL Server 2005
但如果您发现无效的客户端代码,我也不会感到惊讶。特别是在与数据库通信时。
答案 6 :(得分:1)
事实证明,最令人震惊的问题是一些麻烦页面,这些页面使用数千个SQL查询来破坏数据库。代码看起来相对无辜,只是一些数据绑定网格。但是,C#/ LINQ对于它(或我们)自己的好处来说有点太强大了:如果你将一个网格绑定到一个表,但是网格想要显示另一个通过外键链接的表中的字段,它就会这样做!但它是通过运行大量查询来实现的:
SELECT ... FROM other_table WHERE Id = 1
...
SELECT ... FROM other_table WHERE Id = 2
...
SELECT ... FROM other_table WHERE Id = 3
...
SELECT ... FROM other_table WHERE Id = 4
...
等等......通过确保绑定到控件的数据集具有所有必要的数据而不重新查询数据库,问题显着缓解。
现在回到剖析......
答案 7 :(得分:0)
根据我的经验,我会投票支持数据库锁定问题。