我正在调查我们的网络应用程序(MVC2,S#arp架构,流畅的nHibernate)上的性能问题,使用MVC-mini-profiler非常棒。我正在使用我希望发明的动作或控制器的属性,如本文Getting more "granularity" from the MVC Mini Profiler中所述。
我发现在OnResultExecuting和onResultExecuted之间花了很多时间,我认为这必须渲染视图,所以如果从那里调用复杂的逻辑就会出现问题,但我已经放了一个数字分析器调用部分视图,包括整个母版页周围的视图,但仍然有很多时间(在某些情况下大约4-5秒)完全没有计算。
我真的不明白在渲染视图之后OnResultExecuting之后的步骤中发生了什么,所以甚至不知道在哪里寻找性能问题。
任何指针都将不胜感激。
答案 0 :(得分:2)
您是否正在创建视图模型以传递到视图以进行渲染?如果视图模型具有某个集合,并且该集合是使用NHibernate上的Linq查询填充的,那么Linq查询可能是作为呈现视图的一部分执行的。这意味着4-5秒中的一些可能会被数据库访问占用。通常,创建视图模型的任何代码都应确保该视图模型中的所有集合都已完全填充,而不是尚未枚举的IQueryable。
听起来有可能吗?如果是这样,使用NHProf可能会帮助确定它。
答案 1 :(得分:1)
我最好的猜测是它提交了UnitOfWork(NHibernate中的ISession)。这可能是非常耗时的操作。