【发布时间】:2011-01-19 03:24:26
【问题描述】:
我遇到了最奇怪的问题...我有一个单轨网站(一个 .NET 解决方案,类似于 ASP.NET MVC)...并且其中一个页面上有一个保存按钮。单击保存按钮时,它会执行一些代码将对象保存到数据库,然后重定向到另一个页面。但是,它所做的是在您单击保存按钮后立即执行所有保存代码,然后它会在那里停留一段时间,然后重定向到另一个页面并执行其代码。以下是一些让情况变得特别奇怪的事实。
- 每次您完成单击保存并等待其完成和重定向的过程时,都比您上次尝试的时间长 2-4 秒。所以第一次需要 2 秒,然后可能需要 5 秒,然后是 8 秒……
- 如果您回收应用程序池,它会使其再次快速运行,但事实 #1 开始发挥作用,您执行的次数越多,它就会越慢。
- 我添加了日志,它在1毫秒内执行保存和重定向代码,然后等待一段时间,然后快速执行新页面的代码。
- 我尝试将其更改为重定向到 google.com,但它的行为仍然如此。
- 我尝试让它根本不重定向,只是在保存后再次提供现有页面,它仍然以这种方式运行。
- 每次单击保存时,CPU 都会出现峰值(特别是 w3wp 进程)。
- 其他页面的行为方式并非如此,即使是其他保存方法。
- 注释掉保存到数据库的代码可以使其正常工作,无需等待。
那么有没有人知道是什么原因造成的?保存代码使用 Active Record 和 NHibernate。代码本身运行速度非常快,就像我说的不到 1 毫秒,但似乎在代码完成执行后异步发生了一些事情,导致它挂了很长时间..
任何想法将不胜感激,代码位于http://pastebin.com/XGLAWPgK。
【问题讨论】:
-
我会尝试使用分析器来获取更多信息。
-
也试试 NHProf 看看问题是否出在 NHibernate 上,或者至少启动 NH 日志并检查日志。
-
NHProf 似乎没有显示任何有用的东西。它显示了我的更新语句,然后显示了提交事务(两者都非常快),然后 35 秒没有任何内容,然后显示“开始事务与隔离级别:未指定”,然后它开始选择重定向到页面上的数据。
-
我升级了所有的 castle 和 nhibernate dll,这似乎解决了这个问题。很奇怪……
标签: c# nhibernate iis activerecord w3wp