您的位置:首页 > 编程语言 > ASP

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

2014-05-12 00:30 981 查看
http://www.cnblogs.com/shanyou/archive/2012/04/03/2430977.html

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个简易规则



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”



第二步:Online搜索miniprofiler




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请求,也会同时显示到左上角。如果左上角显示红色提示,则表示可能存在性能问题需要处理:




点开SQL部分,可以看到详细的SQL语句




标记为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);

}

翻译此页
阿拉伯语
爱沙尼亚语
白苗文
保加利亚语
波兰语
波斯语
朝鲜语
丹麦语
德语
俄语
法语
繁体中文
芬兰语
海地克里奥尔语
荷兰语
加泰隆语
捷克语
克林贡语
拉脱维亚语
立陶宛语
罗马尼亚语
马耳他语
马来语
挪威语
葡萄牙语
日语
瑞典语
斯洛伐克语
斯洛文尼亚语
泰语
土耳其语
威尔士语
乌尔都语
乌克兰语
西班牙语
希伯来语
希腊语
匈牙利语
意大利语
印地语
印度尼西亚语
英语
越南语

Microsoft® Translator

分类: Entity Framework, ASP.NET
MVC
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: