2012-09-11 40 views
0

我们有一个ASP.NET 4.0 Web应用程序,拥有超过200页的内容。它有一个公共场所和一个cms。 我们在同一台服务器中的近30个域中安装了此应用程序,因此每个域都安装了该应用程序。ASP.NET应用程序性能和内存泄漏

服务器内存(私人工作集)增长缓慢但增长。服务器有8 GB内存,但是在一天中的某些时候,尽管我们每天早上都在回收AppPool,但有时候我们会收到OutOfMemory消息。

它必须有内存泄漏,但我们不知道如何找到这些泄漏。我们已经尝试处理我们所有的元素...

我们需要一些帮助。 是否有公司提供这些服务,我的意思是检查应用程序并修复内存泄漏?

Thanks.-

一些经过研究,我发现很多线路是这样的:

标签xLabel =(标签)FormView.FindControl( “xLabel”)

没有脱手。你不觉得这会产生巨大的泄漏吗?会不会更好:使用(标签xLabel =(标签)FormView.FindControl( “xLabel”)){ 行动}

感谢

+0

如果你放置'xLabel',甚至可能会造成危害,因为'FormView'可能会在ASP.NET页面生命周期的后期工作。由于它似乎置于另一个控制之内,处置应该有效。 –

回答

0

New Relic的

提供这样的服务:https://newrelic.com/有一个免费的试用版,他们在你的应用程序上提供了很好的分析。

或自己完成它,你可以从MSDN看看这篇文章:

http://msdn.microsoft.com/en-us/library/ee658248.aspx


“免责条款 - 客户,员工没有。

+0

谢谢,我编辑了我的消息,因为我发现了一些代码,我认为这可能会非常糟糕。 –

0

如果你的内存不足,在前一天回收后的每一天结束时会出现明显的问题。我想你应该能够找出代码或使用VS.NET内存分析器,如果你有正确的版本。

你也可以看看专业的分析工具,如Ants,这是一个很好的,我发现很多场合很有帮助。

如果您没有可以运行分析器的环境,可以获取内存转储(使用DebugDiag或甚至是任务管理器)并检查(使用windbg)内存中的对象,这可能会导致错误的代码。如果有人正在使用WinDbg,那么相比使用分析工具或在代码库庞大的情况下深入研究代码,这是一个相对更快的选择(因为内存问题是show stoppers)。

顺便提一下,你已经放入的示例代码 - 当容器被清理时,这些引用应该由GC自动清理。如果持有标签本身的容器(视图)没有妥善处理,那么这可能是一个问题。这个问题通常会与其他被引用的对象(大数据对象)无法正确清理。