Когда я создаю свой контекст, используя следующую функцию, профилировщик показывает увеличение примерно на 300 мс по сравнению со стандартным методом создания контекста EF (версия 4). Есть ли другой способ сделать это, который имеет лучшую производительность? Он побеждает цель профилирования производительности как есть.
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);
}
Эта первая использует вышеуказанную функцию для создания контекста. Второй - использование стандартного метода создания контекста EF. Вот разница в производительности при использовании mvc-mini-profiler:
Profiler EF Context: 89.1
Удар по БД: 317,9
Нормальный контекст EF: 0,1
Некоторое попадание в БД: 7.4
ОБНОВЛЕНИЕ 2:
Я провел некоторое профилирование в Visual Studio, и похоже, что основная трудоемкая операция - это MvcMiniProfiler.Helpers.StackTraceSnippet.Get (), и внутри нее есть вызов System.Diagnostics.StackTrace..ctor (bool). Это занимает много времени и кажется причиной вышеуказанной задержки.