2009-11-13 3 views
0

Мы столкнулись с проблемой, когда мы открываем наше приложение и запускаем Subsonic. Выберите, чтобы выбрать время, чтобы вернуть данные. Любые последующие вызовы на один и тот же выбор запускаются очень быстро. Экваториальный T-SQL также работает очень быстро. Это похоже на то, что SubSonic кэширует что-то в первом соединении и повторно использует его при последующих подключениях. Запросы выполняются быстро, пока мы не закроем приложение, а затем не откроем новый, снова первый запуск займет некоторое время, но все последующие вызовы бывают быстрыми.Ошибка при первом запуске, но быстро при последующих вызовах - Subsonic 2.0

Любые идеи по этому вопросу? Нужно ли обновляться до более новой версии?

Я не мог найти упоминания об этом в любом месте.

Приложение - приложение для Windows, хотя у нас есть аналогичная проблема с веб-приложением. Запрос представляет собой простой выбор с внутренним соединением:

Dim status As New subsonicdal.Status("statusCode", "active") 
Dim clientPreferencesDataSet As DataSet = New SubSonic.Select(subsonicdal.ClientPreference.ClientIdColumn, subsonicdal.ClientPreferenceType.AssetOrUnitColumn, subsonicdal.ClientPreferenceUsage.UsageTypeColumn) _ 
                   .From(subsonicdal.ClientPreference.Schema) _ 
                   .InnerJoin(subsonicdal.ClientPreferenceType.Schema) _ 
                   .InnerJoin(subsonicdal.ClientPreferenceUsage.Schema) _ 
                   .Where(subsonicdal.ClientPreference.ClientIdColumn).IsEqualTo(clientId) _ 
                   .And(subsonicdal.ClientPreference.StatusidColumn).IsEqualTo(status.Statusid).ExecuteDataSet() 

В принципе, если я поставил точку останова на Dim clientPreferencesDataSet As DataSet линии, выполнить линию она занимает около 6 секунд. Если я снова сломаю строку, она будет немедленной (до секунды).

В ClientPreferences имеются внешние ключи Integer для ClientPreferenceUsage & ClientPreferenceType существует около 70 записей в ClientPreferences, 8 в ClientPreferenceUsage и 12 в ClientPreferenceType. Его очень простая структура. Если я запустил SQL, который Subsonic генерирует в Mgt Studio, это немедленно. Я попробовал InnerJoining таблицу Status, используя строки для возвращенных полей, но нет никакой разницы.

ответ

1

Две вещи приходят на ум:

  • Возможно подключение к базе данных производятся при первом использовании (ленивого)
  • Или, если это подготовленный запрос, после первого запуска, план выполнения кэшируются и последующие вызовы будут быстрее
+0

Спасибо Yannick, просто интересно, есть ли где-нибудь флаг, который может помешать этому поведению. Если подключение с использованием SqlConnection без Subsonic, я бы ожидал, что запрос будет работать быстро каждый раз, чтобы ваше объяснение было правдой. Мне просто интересно, почему это вызывает заметную задержку. – Craig

1

SubSonic ничего не кэширует - он просто пытается выполнить любой запрос, который вы его выбрали. Это веб-приложение? Если это так (что вы, вероятно, знаете), время загрузки очень медленно.

Более подробно вы можете предложить лучшее - например, тест, который точно определяет проблему загрузки, а также структуру вашего БД (если возможно).

Смежные вопросы