在w3wp进程上使用spiking cpu的奇怪问题

时间:2011-01-19 03:24:26

标签: c# nhibernate iis activerecord w3wp

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

  1. 每次执行单击“保存”并等待其完成并重定向的过程时,所需的时间比上次尝试的时间长2-4秒。所以第一次它需要2秒,然后可能是5秒,然后是8,等等......
  2. 如果您回收应用程序池,它会让它再次快速运行,但事实#1开始运行,并且它越多,它就越慢。
  3. 我添加了日志记录,它在1毫秒内执行保存和重定向代码,然后等待一段时间,然后快速执行新页面的代码。
  4. 我尝试将其更改为重定向到google.com,但它仍然以这种方式运行。
  5. 我尝试完全不重定向,只是在保存后再次提供现有页面,它仍然表现得这样。
  6. 每次单击“保存”时,它都会激活cpu(特别是w3wp进程。)
  7. 其他页面的行为不是这样,甚至是其他保存方法。
  8. 注释掉保存到数据库的代码使其正常工作,无需等待。
  9. 那么有谁知道会导致这种情况的原因是什么?保存代码使用Active Record和NHibernate。代码本身运行速度非常快,就像我说它不到1毫秒一样,但似乎在代码完成执行后异步发生的事情让它挂了很长时间..

    我们非常感谢任何想法,代码位于http://pastebin.com/XGLAWPgK

1 个答案:

答案 0 :(得分:0)

我的单轨列车有点生锈......

您是在每次请求之后处理ActiveRecord / nHibernate上下文还是在Session状态下缓存它?您要为每个请求创建一个新的上下文。

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