2009-03-22 3 views
2

Я пытаюсь разработать свой первый веб-проект, используя структуру сущности, в то время как мне нравится, как вы можете использовать linq вместо написания sql, у меня есть некоторые серьезные результаты. У меня есть много необработанных данных в таблице, которые я хотел бы сделать несколькими преобразованиями, а затем вставить в другую таблицу. Я просматриваю все объекты и вставляю их в свою новую таблицу. Мне нужно сделать небольшие сравнения (поэтому мне нужно вставить данные в другую таблицу), но для тестов производительности я их удалил. Следующий код (который установил приблизительно 12-15 свойств) занял 21 секунду, что довольно длительное время. Это обычно так медленно, и что я могу сделать неправильно?Структура сущности и производительность

DataLayer.MotorExtractionEntities mee = new DataLayer.MotorExtractionEntities(); 
List<DataLayer.CarsBulk> carsBulkAll = ((from c in mee.CarsBulk select c).Take(100)).ToList(); 

foreach (DataLayer.CarsBulk carBulk in carsBulkAll) 
{ 
    DataLayer.Car car = new DataLayer.Car(); 
    car.URL = carBulk.URL; 
    car.color = carBulk.SellerCity.ToString(); 
    car.year = //... more properties is set this way 

    mee.AddToCar(car); 
} 
mee.SaveChanges(); 
+0

Извините за неправильный отступ кода ... – 2009-03-22 18:36:42

+0

Я попытался удалить mee.SaveChanges, и теперь он работает очень быстро, так что может быть проблемой при передаче данных? – 2009-03-22 18:59:40

ответ

0

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

Какая строка вашего кода вызывает большую задержку, вы попытались отладить ее и просто измерить, какой метод занимает больше всего времени?

Кроме того, сложность структуры базы данных может немного замедлить структуру сущности, но не скорость, о которой вы говорите. Существуют ли какие-то «бесконечные петли» в вашей структуре БД? Без структуры БД действительно сложно сказать, что не так.

+0

Wim, структура базы данных очень проста, никаких отношений вообще нет, и только около 15 полей в ней, поэтому я думаю, что это странно, для сохранения изменений всего за 100 строк требуется 10-20 секунд? – 2009-03-25 19:56:06

+0

С вашего поста, я уже немного ускорил его, имея базу данных, которую мы запускаем для клиента. Это довольно сложная база данных, и создание 100 новых строк со всеми видами отношений занимает всего 3 секунды. Должен сказать, у меня есть база данных, работающая локально, так что ускоряется thiings –

0

Можете ли вы попробовать то же самое в прямом SQL?

Проблема может быть связана с вашей базой данных, а не с инфраструктурой Entity Framework. Например, если у вас массивные индексы и множество контрольных ограничений, вставка может стать медленной.

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

Попытка этого в SQL напрямую скажет вам, действительно ли проблема с EF.

0

Я думаю, что я решил проблему. Я запускаю приложение локально, а база данных находится в другой стране (сосед, но тем не менее). Я попытался загрузить приложение на сервер и запустить его оттуда, и ему потребовалось всего 2 секунды для запуска вместо 20. Я попытался перенести 1000 записей, которые заняли 26 секунд, что является довольно обновленным, хотя я не знаете, является ли это «обычной» скоростью для сохранения 1000 записей в базе данных?

+0

[Должен ли я когда-либо использовать Entity Framework 4.0?] (Http://izlooite.blogspot.com/2011/04/should-i-ever- потребительная сущность-рамки-40.html) –

1

Вы не можете создавать пакетные обновления, используя Entity Framework.

Представьте, что вы должны обновлять строки в таблице с SQL заявления, как это:

UPDATE table SET col1 = @a where col2 = @b 

Использование SQL это только один туда и обратно на сервер. Используя Entity Framework, у вас есть (по крайней мере) один обратный путь к серверу, загружающий все данные, затем вы изменяете строки на клиенте, затем он отправляет его обратно по строке.

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

Так что для таких обновлений хранимая процедура все еще намного эффективнее.

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