EF 4.1 Sql CE Проблемы с производительностью - PullRequest
0 голосов
/ 13 апреля 2011

Я знаю, я сегодня нахожусь в режиме вопросов,

Я нахожусь в процессе создания настольного приложения.К счастью для меня, я выбрал открытую архитектуру, потому что столкнулся со следующей проблемой:

Мое приложение позволяет пользователям добавлять операции.В моих тестах я добавил только маленькие (тестовые) операции, которые легко управляемы.Каждая операция добавляется в хранилище данных, которое в настоящее время является базой данных SQL CE 4.0 (доступ к ней осуществляется с помощью кода EF 4.1, что здорово).

Теперь я протестировал приложение с помощью обычной операции, которая больше (приблизительно 4000 строк вБаза данных).Вместо того, чтобы занять несколько секунд, на самом деле вставка занимает несколько минут!В большой таблице есть только 1 внешний ключ и, конечно, первичный ключ, но кажется, что 4000 строк - это слишком много.

Все строки вставляются в 1 пакет, и реальная нехватка производительности связана сКоманда SaveChanges.

Я уже почти все об использовании ручных запросов (пока не проверял), но это не предпочтительный вариант, поскольку транзакции не поддерживаются и это должна быть изолированная операция.

Итак, сделайтенужна новая стратегия здесь?В SQL Server 2008 вы можете выполнять массовую вставку, но, по-видимому, она также не поддерживается Sql Server CE.

Какие решения на стороне клиента являются такими же гибкими, как SQL Server CE, и легкими?(Например, конечно, я не хочу, чтобы пользователь устанавливал SQL Server или использовал некоторые нативные компоненты).

Я могу использовать сериализацию в некоторых формах, но это похоже на переизобретение колеса и много работы (обновление, целостность,многопоточный доступ и т. д.).

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 14 апреля 2011

http://msdn.microsoft.com/en-us/magazine/gg490349.aspx

конкретно не отвечает на вашу проблему, но эти методы определенно помогут вам устранить неполадки в ваших запросах.

0 голосов
/ 14 апреля 2011

Оба ответа были полезны, но не дали решения.

Я нашел это: http://sqlcebulkcopy.codeplex.com/, который предоставляет класс SqlCeBulkCopy, который работает и выполняет вставку в течение 2 секунд !.Сейчас я работаю над тем, чтобы интегрировать его в мою текущую модель хранилища и unitofwork.Как только я найду лучшее решение, я опубликую его здесь.

Скоро будет следовать ...

0 голосов
/ 14 апреля 2011

Вопрос в том, насколько медленной обычно является операция вставки в SQL CE?Проблема с EF заключается в том, что он не запрашивает одну партию для вставки 4000 записей, а вставляет записи одну за другой.Текущая версия EF не поддерживает пакетирование команд, поэтому вы выполняете 4.000 вставок в последовательности.Это проблема и для большого SQL Server, но обычно она быстрее.Мне удалось вставить около 50 000 - 100 000 более сложных записей в SQL Server за шесть минут на медленном рабочем столе и за три минуты на сервере.

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