2011-07-05 2 views
7

私はMVC-Mini-Profilerで遊んでいて、非常に便利です。しかし、私がトレースしたすべてのページで、私は以下のような重複したクエリの報告を受け取ります。MVC-Mini-Profilerは、重複したクエリを間違って表示しています

しかし、私はSQL Server Profilerでクエリをトレースしており、DBに一度しかヒットしないことは間違いありません。

ここにコンセプトがないのですか、間違った方法で設定しましたか?私は、同じ問題を抱えている人々のために、運がなくても、高いものと低いものを検索したので、バグがあるとは思わない。

Trace

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; 
     } 
    } 
} 
+0

これは起こりますか? ...リクエストの開始時に 'var s = MiniProfiler.Current.Step("何でも "))'を実行して、リクエストの最後にそれを破棄することができますか? –

+0

私は同じ問題が発生しているので、私はここに到着しました。 dbプロファイリングは必要ありません(まだ!) - 一度だけ送信されているAjaxリクエスト(Glimpseはこれを確認します)はまだ出力に複数回表示されます。 /mini-profiler-results?id = SOMEGUIDに対応する複数の呼び出しがあります.SOMEGUIDは重複していることがあります。私が今見ている例では、4つのAjaxリクエストのための/ mini-profiler-resultsへの呼び出しが6つあり、2つはGUIDSの重複があり、これはプロファイラからの6つの出力結果に対応しています。希望は意味をなさない! – randomsequence

+0

MVC Mini Profilerバージョン1.9でこの問題が発生しています。 – solidbeats

答えて

5

を私はミニプロファイラチームにこのことを報告した(http://code.google.com/p/mvc-mini-profiler/issues/detail?id = 62 & can = 1)、今日問題を修正しているパッチが発行されています。

これは次のリリースに含まれると思います。あなたが最新のナゲットをつかんだ場合、これは役に立ちます:

関連する問題