Минипрофайлер: сайт необъяснимо быстр

Мы установили минипрофайлер. Это был поучительный опыт, но теперь мы видим, что наши запросы к базе данных выполняются в 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);
}

Linq2Sql внезапно... быстро.

Я не жалуюсь, но почему это происходит?


person Code Silverback    schedule 27.06.2011    source источник
comment
Единственное, что приходит на ум, это то, что, возможно, добавление ProfiledDbConnection привело к тому, что запрос вернул кэшированные элементы, но это всего лишь предположение...   -  person chrisfrancis27    schedule 28.06.2011
comment
мы ничего не делаем для повышения производительности, ожидается, что производительность будет немного медленнее, когда включено профилирование. Поскольку это попадание затрагивает только часть пользователей (разработчиков), оно приемлемо.   -  person Sam Saffron    schedule 28.06.2011
comment
Чего я и ожидал... но это не то, что мы наблюдаем. Я, например, сбит с толку.   -  person Code Silverback    schedule 28.06.2011
comment
Он работает быстрее? Вау, этот профилировщик прекрасен, не правда ли?   -  person Brant Bobby    schedule 28.06.2011
comment
Я испытываю прямо противоположное. Я использую EF, и он добавляет около 300 мс к большинству операторов Linq. Проблема здесь: stackoverflow .com/questions/6439827/   -  person WVDominick    schedule 29.06.2011


Ответы (1)


Что вы подразумеваете под «запросы к базе данных выполняются в 3 раза быстрее»?

  1. Если вы запускаете SQL Profiler - вы видите, что время выполнения db в 3 раза меньше?
  2. Время выполнения высокоуровневого метода в вашем коде, который в конечном итоге запрашивает базу данных, в 3 раза меньше?

Если это случай 1, то разница будет в сгенерированном SQL - сравните оба оператора. Если это случай 2, запустите профайлер C# (Ants, dotTrace) и сравните время выполнения всех методов.

Разница такой величины будет связана с совершенно другим путем выполнения - возможно, вы не выполняете тяжелый цикл или получаете данные из кеша.

Прежде всего, вы можете проверить, обращаетесь ли вы к базе данных вообще, и количество запросов точно такое же.

person Jakub Konecki    schedule 03.07.2011