【发布时间】:2012-04-13 22:58:43
【问题描述】:
我在使用 ASP.Net/C# 开发的网站时遇到问题,有时会无限期占用所有 CPU 使用率 (100%)。您有什么想法/提示如何解决可能导致这种资源消耗的问题吗?该网站仍在响应,所以它没有崩溃或类似的东西。
我有点不知道从哪里开始!
谢谢!
【问题讨论】:
-
问题仅在特定页面中?
标签: c# asp.net performance iis application-pool
我在使用 ASP.Net/C# 开发的网站时遇到问题,有时会无限期占用所有 CPU 使用率 (100%)。您有什么想法/提示如何解决可能导致这种资源消耗的问题吗?该网站仍在响应,所以它没有崩溃或类似的东西。
我有点不知道从哪里开始!
谢谢!
【问题讨论】:
标签: c# asp.net performance iis application-pool
开始在服务器上使用性能计数器。添加垃圾收集、线程使用的计数器,并准确查看哪个线程正在消耗 CPU。
另外,看看这个:
【讨论】:
DebugDiag 是一个很好的起点:http://www.microsoft.com/download/en/details.aspx?id=26798
【讨论】:
我在过去遇到了同样的问题。我主要遇到HTML rendering 非常慢的问题。
我通过在页面指令中设置Trace = true 解决了这个问题,并发现了需要时间的事件。
另一个问题是Memory Management。我正在使用Image Classes,但没有正确使用Dispose。为此,我开始使用Dispose() 方法,并且可以在架构中使用 Using 语句。
using (SqlConnection con = new SqlConnection("Connection String"))
{
using (SqlCommand cmd = new SqlCommand())
{
using (SqlDataReader DR = cmd.ExecuteReader())
{
}
using (DataTable DT = new DataTable())
{
}
}
}
我假设您可能有任何页面可能会获取过多的记录。你可以开始使用Paging了。
最重要的一点是Exception Handling。 Try Catch 块不应该在每一层中。它应该只在Presentation Layer 中。原因是,当发生异常时,它会直接返回调用函数。那么为什么要在每一层写Try Catch 块和stopping the execution
【讨论】:
到目前为止,最好和最简单的起点是使用性能分析器。只需运行它,如果运气好的话,您将在几分钟内解决问题。
试试dotTrace,这是一个相当不错的。如果您点击链接,则有 10 天免费试用和视频教程。
【讨论】: