Проблемы с производительностью ActiveRecord / NHibernate и SQL CE - PullRequest
1 голос
/ 21 июля 2010

Наша команда в настоящее время работает над приложением WPF Desktop с ActiveRecord и SQLCE 3.5 для серверной части. У нас были некоторые странные проблемы с производительностью при выполнении запросов или создании / обновлении записей. В некоторых случаях открытие формы с несколькими сетками и элементами данных, которые необходимо заполнить, может занять около 2 секунд! Это не очень идеально для настольных приложений. Мы провели некоторое тестирование как с Active Record, так и с Fluent NHibernate и обнаружили, что при очень простой сущности (2 строковых поля, без ассоциаций) вызов Create () в первый раз займет около 300 мс, а в последующие около 100 мс. Для FindAll (учитывая, что в таблице только 5-6 строк), первый вызов занимает около 200 мс, а последующие вызовы - около 80 мс. SQLite был несколько быстрее (в некоторых случаях примерно вдвое), но SQL Server был значительно быстрее; около 5-6 мс для запросов и вставок после первого вызова!

Мы вырыли немного дальше, проблема (среди прочего, возможно), кажется, связана с созданием сессии и выпусками под капотом. Они кажутся довольно медленными для SQLCE и SQLite. Для больших наборов данных производительность, похоже, похожа на SQL Server, что заставляет меня думать, что проблема не в выполнении самого запроса. Но учитывая все виды кэширования и управления сессиями, которые происходят между ActiveRecord, NHibernate и базой данных, я не совсем уверен, в чем проблема на самом деле.

Является ли этот тип производительности нормальным с SQLCE (и SQLite)? Есть ли какие-нибудь хитрости, которые можно сделать, чтобы улучшить это? Я ожидал бы, что они будут быстрее, чем SQL Server, и, конечно, не более 100 мсек для выполнения простой операции. Любые намеки или предложения будут великолепны!

...