7
私はMVC-Mini-Profilerで遊んでいて、非常に便利です。しかし、私がトレースしたすべてのページで、私は以下のような重複したクエリの報告を受け取ります。MVC-Mini-Profilerは、重複したクエリを間違って表示しています
しかし、私はSQL Server Profilerでクエリをトレースしており、DBに一度しかヒットしないことは間違いありません。
ここにコンセプトがないのですか、間違った方法で設定しましたか?私は、同じ問題を抱えている人々のために、運がなくても、高いものと低いものを検索したので、バグがあるとは思わない。
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;
}
}
}
これは起こりますか? ...リクエストの開始時に 'var s = MiniProfiler.Current.Step("何でも "))'を実行して、リクエストの最後にそれを破棄することができますか? –
私は同じ問題が発生しているので、私はここに到着しました。 dbプロファイリングは必要ありません(まだ!) - 一度だけ送信されているAjaxリクエスト(Glimpseはこれを確認します)はまだ出力に複数回表示されます。 /mini-profiler-results?id = SOMEGUIDに対応する複数の呼び出しがあります.SOMEGUIDは重複していることがあります。私が今見ている例では、4つのAjaxリクエストのための/ mini-profiler-resultsへの呼び出しが6つあり、2つはGUIDSの重複があり、これはプロファイラからの6つの出力結果に対応しています。希望は意味をなさない! – randomsequence
MVC Mini Profilerバージョン1.9でこの問題が発生しています。 – solidbeats