Ajax运用MiniProfiler调试ASP.NET MVC网站性能

MVC MiniProfiler是Stack
Overflow团设计的同等悠悠针对ASP.NET
MVC的性分析的略程序。可以针对一个页面本身,及拖欠页面通过一直引用、Ajax、Iframe形式拜访的其余页面进行督查,监控内容包括数据库内容,并得以来得数据库访问的SQL(支持EF、EF
CodeFirst等 )。并且以充分团结的章程呈现在页面及。

该Profiler的一个特意有效之效能是她同数据库框架的拼。除了.NET原生的
DbConnection类,profiler还置了对实业框架(Entity Framework)以及LINQ
to
SQL的支持。任何履行之Step都见面包括这询问的次数与所花的时刻。为了检测常见的荒谬,如N+1反模式,profiler将检测就发生参数值存在差
异的多只查询。

MiniProfiler凡为Apache
License
V2.0商议发布之,你得在NuGet找到。配置与应用得扣押这里:http://code.google.com/p/mvc-mini-profiler

也确立快速的网站黄金参考标准,雅虎2007年呢网站加强速度的13单简单规则。

Ajax 1

Stack Overflow 用MVC Mini
Profiler来促进开源,而以把各个一样页的右上较量服务器渲染时间之简短行来迫使我们解决我们拥有的属性衰退及落。如果你在使用.NET开发使用,一定要运及这个家伙。

席卷以下基本组件:

  • MiniProfiler
  • MiniProfiler.EntityFramework

哪设置?

一如既往、环境准备
  • Visual Studio 2010
  • ASP.NET MVC项目
  • 倘急需调试EF,建议升级至Entity Framework 4.2
二、安装

引进使用NuGet方式展开设置,参考文章《使 NuGet
管理类库》

率先步:在援上右键选择“Manage NuGet Packages”
Ajax 2

  • 第二步:Online搜索miniprofiler

Ajax 3

MiniProfiler、MiniProfiler.EF、MiniProfiler.MVC3,同时会自行装依赖组件:WebActivator,
同时为会见自动在项目中添加代码文件:MiniProfiler.cs

  • 老三步:修改代码使MiniProfiler生效

在global.cs的Application_Start事件中长代码:
StackExchange.Profiling.MiniProfilerEF.Initialize();
改View的layout文件,在head区域增加如下代码:@StackExchange.Profiling.MiniProfiler.RenderIncludes()

 

倘若设置步骤一切顺利的言语,打开站点的时段,就可以当左上角相页面执行时了,点开可以视更详实的消息,如果有SQL的话语,还见面展示SQL语句信息,非常的有利。
页面上只要发ajax请求,也会以显示到左上角。如果左上角显示红色提示,则象征可能在性能问题需处理:

Ajax 4

接触开SQL部分,可以看详细的SQL语句

Ajax 5

标志为duplicate的一对,代表在平差呼吁中,重复执行了询问,可以优化。

问题:

1、在组合使用EF 4.3的时来如下错误:

Invalid object name ‘dbo.__MigrationHistory’.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException
exception, Boolean breakConnection)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException
exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,
SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet
bulkCopyHandler, TdsParserStateObject stateObj)
   at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
   at System.Data.SqlClient.SqlDataReader.get_MetaData()
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader
ds, RunBehavior runBehavior, String resetOptionsString)
   at
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior
cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean
async)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior
cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String
method, DbAsyncResult result)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior
cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String
method)
   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior
behavior, String method)
   at
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior
behavior)
   at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior
behavior)
   at
MvcMiniProfiler.Data.ProfiledDbCommand.ExecuteDbDataReader(CommandBehavior
behavior) in
\mvc-mini-profiler\MvcMiniProfiler\Data\ProfiledDbCommand.cs:line
155
   at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior
behavior)
   at
System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand
entityCommand, CommandBehavior behavior)

内需以EF 4.3达标关闭数据库初始化策略:

public class SettingContext : DbContext
{
        static SettingContext()
        {
            Database.SetInitializer<SettingContext>(null);
        }

相关文章