当我使用下面的函数创建我的上下文时,分析器显示从标准EF(版本4)上下文创建方法增加大约300ms.还有另一种方法可以做到更好的表现吗?它失败了性能分析的目的.
public static Models.MyEntities GetContext()
{
var profiler = MiniProfiler.Current;
var sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString);
var profiledConnection = MvcMiniProfiler.Data.ProfiledDbConnection.Get(sqlConn, profiler);
return ObjectContextUtils.CreateObjectContext<Models.MyEntities>(profiledConnection);
}
Run Code Online (Sandbox Code Playgroud)
第一个是使用上面的函数来创建上下文.第二种是使用标准的EF上下文创建方法.以下是使用mvc-mini-profiler的性能差异:
Profiler EF上下文:89.1
一些数据库命中:317.9
正常EF上下文:0.1
一些数据库命中:7.4
更新2:我在Visual Studio中进行了一些分析,看起来主要的耗时操作是MvcMiniProfiler.Helpers.StackTraceSnippet.Get(),并且在其中有一个对System.Diagnostics.StackTrace..ctor(bool)的调用.这需要很长时间才能完成,似乎是导致上述延迟的原因.
我确信可以分析Enterprise Library SQL命令,但我无法弄清楚如何包装连接.这就是我想出的:
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbCommand = db.GetStoredProcCommand(PROC);
ProfiledDbCommand cmd = new ProfiledDbCommand(dbCommand, dbCommand.Connection, MvcMiniProfiler.MiniProfiler.Current);
db.AddInParameter(cmd, "foo", DbType.Int64, 0);
DataSet ds = db.ExecuteDataSet(cmd);
Run Code Online (Sandbox Code Playgroud)
这导致以下异常:
无法将类型为"MvcMiniProfiler.Data.ProfiledDbCommand"的对象强制转换为"System.Data.SqlClient.SqlCommand".
我有一个使用mvc-mini-profiler的asp.net项目.我使用的是NuGet包的1.7版本,我注意到有一个更新的软件包,其版本为1.9.我更新了包,现在我的代码不再编译了.无法编译的代码是:
public static T GetProfiledContext<T>() where T : System.Data.Objects.ObjectContext
{
var conn = GetStoreConnection<T>();
if (_enableProfiling)
{
conn = ProfiledDbConnection.Get(conn);
}
return ObjectContextUtils.CreateObjectContext<T>(conn);
}
Run Code Online (Sandbox Code Playgroud)
编译错误报告以下问题:
我注意到我可以创建ProfiledDbConnection的实例并将它传递给连接和IDbProfiler类型的对象,但我不确定如何获取该对象.
关于ObjectContextUtils,我不知道我应该使用什么.
我该如何解决这些问题?
更新:
通过遵循@ monkeychatter的建议,我设法构建了代码.我现在得到以下运行时异常:
在"MvcMiniProfiler.Data.ProfiledDbConnection"类型的商店提供程序实例上调用"get_ProviderFactory"方法后返回null.商店提供商可能无法正常运行.
通过检查ILSpy中的ProfiledDbConnection,我注意到它不再覆盖DbProviderFactory.这似乎是错误的原因,因为基本实现返回null.有没有人能够解决这个问题?
我们已经开始使用MiniProfiler并且它有时会显示,特别是当我们在Visual Studio中运行时遇到F5时,在我们的任何代码执行之前,对动作的前3 - 5调用非常慢,如下图所示,它似乎总是如此大约是5,这些是返回图像的动作,但是当MiniProfiler显示我们的任何代码甚至执行之前所有时间都在发生时,如果我注释掉了2050ms的图像,那么另一个需要0.5ms的图像只需要长.我们在web.config中设置了debug = false,这没有任何区别.
我们正在使用ProfilingActionFilter和ProfilingViewEngine,但还有另一种方法来分析这里发生的事情并尝试解决问题吗?
编辑:我们也在使用AutoFac,这是可能的原因,我正在尝试找到一种分析所有内容的方法,以便我可以确切地看到这种情况发生的地方.
编辑:好所以我添加了自己的ControllerFactory,其中包含配置文件和路由约束,因为下面的新图像显示在Application_BeginRequest之前,甚至在创建路径约束或控制器之前发生的所有时间.对于花费这么多时间的事情,我完全不知所措.看看MVC管道的这个链接可以留下什么?
http://blog.stevensanderson.com/blogfiles/2007/ASPNET-MVC-Pipeline/ASP.NET%20MVC%20Pipeline.pdf


从MiniProfiler v2升级到v3后,ProfilingActionFilter和ProfilingViewEngine似乎丢失了?
我用谷歌搜索,甚至检查了大会上类似的东西,但没有任何东西可以突出,因为它是替代品?
我错过了什么吗?
下面是我Using和我的代码部分尝试实现这一点.
using StackExchange.Profiling;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
GlobalFilters.Filters.Add(new ProfilingActionFilter());
ViewEngines.Engines.Add(new ProfilingViewEngine(razorEngine));
Run Code Online (Sandbox Code Playgroud) 阅读http://code.google.com/p/mvc-mini-profiler/上的文章
对于java web应用程序,这样的任何开源分析器都可用吗?
有人开始将这个端口移植到Java环境中吗?
谢谢.
我们安装了miniprofiler.它一直是一种启发性的体验,但是现在我们看到我们的数据库查询运行速度提高了3倍,启用了启动器,因为它已禁用.
我们在应用程序中更改的唯一代码是添加profiledDbConnection:
public static DbConnection GetOpenConnection(string connectionString)
{
var cnn = new System.Data.SqlClient.SqlConnection(connectionString);
// wrap the connection with a profiling connection that tracks timings
return MvcMiniProfiler.Data.ProfiledDbConnection.Get(cnn, MiniProfiler.Current);
}
Run Code Online (Sandbox Code Playgroud)
Linq2Sql突然......快.
我不是在抱怨,但为什么会这样呢?
我在让MiniProfiler向我展示报告方面遇到了问题.我只是在Dev环境中,它应该一直显示它.添加?pp=help确实会显示帮助页面.在tmp/miniprofile中,有大量的mp_timers_文件.显然有些事情发生在那里.
起初我认为这是一个奇怪的CSS问题,就像我的导航栏覆盖它一样.我尝试加载没有CSS的页面,MiniProfile框仍然没有出现.
如果重要,我没有before_filter设置.但是,当我使用他们的文档中的简单文件时,它没有任何帮助.
我正在尝试使用SqlMembershipProvider在MiniProfiler中显示时发生任何数据库查询,但我想不出任何更换SqlConnection的方法是使用ProfiledDbConnection,因为它似乎在内部完成所有操作.任何人都有任何巧妙的想法?
我正在研究的ASP.NET MVC网站上有一些( - 已发布的Controller)"用户"页面和一些(已发布的ApiController)"api"页面.
该网站使用MiniProfiler来检测"用户"页面,我真的很喜欢它.我希望在"api"页面中具有相同或相似的功能 - 特别是,已执行的SQL语句的记录,以及所有内容的使用时间.
我看到这个看起来很有前途的链接,其中入口点的URL只是输入到浏览器地址栏中,但这是使用ASP.NET MVC WebApi开箱即用的默认视图.我自己的URL返回XML文档(或JSON响应).
此外,我更喜欢能够让我远离浏览器的东西,因为我的现实API调用是由另一个程序启动的,我希望能够记录整个会话的信息,而不仅仅是单一请求.
有什么建议?