ASP.NET网站在未进行回收之前运行缓慢

4

我最近将一个网站从IIS6迁移到了IIS7,并且遇到了很多性能问题。

在我对应用程序池进行回收之前,网站的性能非常糟糕。这可能是什么症状?

我每天晚上都要回收,但好像还不够?

我并没有太多依赖于Sessions。而是大量使用缓存。


你可能已经忘记了打开句柄或其他内存问题,也许计算机的物理内存不足...如果你可以直接访问计算机,你可以检查一些东西。 - Aristos
我可以完全访问计算机。请建议要检查什么? - Niels Bosma
1
使用sysinternals的Process Explorer工具,并检查物理内存。 - Aristos
这可能是一种通用类型的答案,但我真的很怀疑。你应该在这里列出你的代码,因为它听起来像是你处理缓存和会话的系统化方法。我有超过50个高流量的电子商务网站,使用轻量级的缓存和序列化方法,可以很好地扩展。你必须列出你的代码,这样我们才能看到你正在做什么来引起这个问题。 - King Friday
2个回答

4
您可以在这里找到一些非常好的教程,了解如何使用.NET和ASP.NET调试最常见的挂起、性能、内存和崩溃情况:.NET Debugging Demos - Information and setup instructions。这些系列真的值得阅读,因为它充满了信息,但需要花费相当长的时间 :-)
服务器端应用程序的一个常见问题是分配大量“大” .NET对象,这些对象会占用大对象堆 (LOH)。例如,检查您是否进行了大量大文件(PDF、图像等)的生成、复制等操作,如果分配的byte[]MemoryStream大于85Kb,则这些对象将进入 LOH 堆中,此堆无法压缩。为此,应该使用纯流式处理方式,而不是进行全尺寸的分配。

3
在我发布了一些新的.NET组件后,我的网站消耗了太多的应用程序池内存。我手动回收内存(大约每天一次),但我打算实现一个阈值来自动回收内存的作业。
无论如何,请查找清理语句、关闭连接、对象销毁等方面的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接