0

我遇到了最奇怪的问题...我有一个单轨网站(一个.NET 解决方案,类似于 ASP.NET MVC).. 在其中一个页面上有一个保存按钮。单击保存按钮时,它会执行一些代码将对象保存到数据库,然后重定向到另一个页面。但是,它所做的是在您单击保存按钮后立即执行所有保存代码,然后它会在那里停留一段时间,然后重定向到另一个页面并执行其代码。这里有一些关于这种情况的事实,这使得它特别奇怪。

  1. 每次您完成单击保存并等待它完成和重定向的过程时,它都会比您上次尝试的时间长 2-4 秒。所以第一次需要 2 秒,然后可能是 5 秒,然后是 8 秒,等等......
  2. 如果您回收应用程序池,它会使其再次快速运行,但随后事实 #1 开始发挥作用,并且执行次数越多,它就会变得越慢。
  3. 我添加了日志,它在 1 毫秒内执行保存和重定向代码,然后等待一段时间,然后快速执行新页面的代码。
  4. 我尝试将其更改为重定向到 google.com,但它仍然以这种方式运行。
  5. 我尝试让它根本不重定向,只是在保存后再次提供现有页面,它仍然以这种方式运行。
  6. 每次单击保存时,它都会使 CPU 达到峰值(特别是 w3wp 进程。)
  7. 其他页面不这样做,即使是其他保存方法。
  8. 注释掉保存到数据库中的代码可以使其正常工作,无需等待。

那么有没有人知道会导致这种情况的原因是什么?保存代码使用 Active Record 和 NHibernate。代码本身运行得非常快,就像我说的不到 1 毫秒,但似乎在代码完成执行后异步发生了一些事情,使它挂了很长时间..

任何想法将不胜感激,代码位于http://pastebin.com/XGLAWPgK

4

1 回答 1

0

我的单轨电车有点生锈了...

您是在每次请求后处理 ActiveRecord/nHibernate 上下文还是将其缓存在会话状态中?您应该为每个请求创建一个新的上下文。

您是否渴望加载数据实体?如果您正在保存数据,它可能会获取所有关联的实体。

于 2011-01-19T06:47:57.617 回答