【问题标题】:MVC-Mini-Profiler falsely showing duplicate queriesMVC-Mini-Profiler 错误地显示重复查询
【发布时间】:2011-07-05 15:35:55
【问题描述】:

我一直在使用 MVC-Mini-Profiler,发现它非常有用。但是,在我跟踪的所有页面上,我都会收到重复查询的报告,如下所示。

但是,我已经在 SQL Server Profiler 中跟踪了查询,毫无疑问,它只访问了数据库一次。

我在这里遗漏了一个概念还是我设置错误?我到处搜索有类似问题的人,但没有运气,所以我怀疑是否存在错误。

http://localhost:27941/clubs
T+175.2 ms
Reader
13.6 ms
utePageHierarchy Execute System.Collections.Generic.IEnumerable<T>.GetEnumerator GetResults Execute ExecuteStoreCommands
SELECT 
[Extent1].[TeamId] AS [TeamId], 
[Extent1].[Title] AS [Title], 
[Extent1].[TitleShort] AS [TitleShort], 
[Extent1].[LogoImageId] AS [LogoImageId], 
[Extent1].[Slug] AS [Slug], 
(SELECT 
    COUNT(1) AS [A1]
    FROM [dbo].[Athletes] AS [Extent2]
    WHERE [Extent1].[TeamId] = [Extent2].[TeamId]) AS [C1]
FROM [dbo].[Teams] AS [Extent1]
WHERE 352 = [Extent1].[CountryId]

http://localhost:27941/clubs
T+175.4 ms
DUPLICATE Reader
13.4 ms
utePageHierarchy Execute System.Collections.Generic.IEnumerable<T>.GetEnumerator GetResults Execute ExecuteStoreCommands
SELECT 
[Extent1].[TeamId] AS [TeamId], 
[Extent1].[Title] AS [Title], 
[Extent1].[TitleShort] AS [TitleShort], 
[Extent1].[LogoImageId] AS [LogoImageId], 
[Extent1].[Slug] AS [Slug], 
(SELECT 
    COUNT(1) AS [A1]
    FROM [dbo].[Athletes] AS [Extent2]
    WHERE [Extent1].[TeamId] = [Extent2].[TeamId]) AS [C1]
FROM [dbo].[Teams] AS [Extent1]
WHERE 352 = [Extent1].[CountryId

我使用 EF4 并实现了这样的上下文:

public class BaseController : Controller
{
    public ResultsDBEntities _db; 

    public BaseController()
    {
        var rootconn = ProfiledDbConnection.Get(GetStoreConnection(ConfigurationManager.ConnectionStrings["ResultsDBEntities"].ConnectionString));
        var conn = ProfiledDbConnection.Get(rootconn);
        _db = ObjectContextUtils.CreateObjectContext<ResultsDBEntities>(conn);
    }

    public static DbConnection GetStoreConnection<T>() where T : System.Data.Objects.ObjectContext
    {
        return GetStoreConnection("name=" + typeof(T).Name);
    }

    public static DbConnection GetStoreConnection(string entityConnectionString)
    {
        DbConnection storeConnection;

        // Let entity framework do the heavy-lifting to create the connection.
        using (var connection = new EntityConnection(entityConnectionString))
        {
            // Steal the connection that EF created.
            storeConnection = connection.StoreConnection;

            // Make EF forget about the connection that we stole (HACK!)
            connection.GetType().GetField("_storeConnection",
                BindingFlags.NonPublic | BindingFlags.Instance).SetValue(connection, null);

            // Return our shiny, new connection.
            return storeConnection;
        }
    }
}

【问题讨论】:

  • 如果您获取最新的 nuget,会发生这种情况吗? ...您能否确保在请求开始时执行 var s = MiniProfiler.Current.Step("whatever")) 并在请求结束时处理它?
  • 我来到这里是因为我遇到了同样的问题。没有涉及数据库分析(还没有!) - 只是只发送一次的 ajax 请求(Glimpse 证实了这一点)但在输出中出现了多次。我可以看到对 /mini-profiler-results?id=SOMEGUID 的相应多次调用,其中 SOMEGUID 有时会重复。在我现在正在查看的示例中,有六个对 /mini-profiler-results 的调用用于四个 ajax 请求,两个具有重复的 GUIDS,这对应于我的分析器的六个输出结果。希望这是有道理的!
  • 我在使用 MVC Mini Profiler 1.9 版时遇到了这个问题。

标签: asp.net-mvc-3 mvc-mini-profiler


【解决方案1】:

我向 Mini Profiler 团队 (http://code.google.com/p/mvc-mini-profiler/issues/detail?id=62&can=1) 报告了这个问题,他们今天发布了一个补丁解决问题。

我想这将包含在下一个版本中。希望有帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    相关资源
    最近更新 更多