Метод AddObject () очень медленный - PullRequest
0 голосов
/ 01 марта 2012

У меня странная проблема, когда я пытаюсь использовать ObjectSet (TEntity) .AddObject () для добавления нового объекта, он очень медленный по сравнению с обычным поведением, это занимает около 500 мс, и это происходит только один раз, и яЯ уверен, что инструкция, которая занимает некоторое время, является AddObject, а не SaveChanges.

Код очень прост

    ObjectEntity obj = businessObj.ExtractEntityObj();
    context.ObjectTable.AddObject(ObjectEntity);

Я делаю некоторую работу с ObjectContext, прежде чем вызвать эту частькод, но это не намного больше, чем то, что я делаю во всех других операциях, Кажется, это зависит от того, сколько элементов с одинаковым внешним ключом хранится в базе данных , я знаю, это может звучать странно, но этоединственная переменная, которая позволяет изменить производительность этой же инструкции.Я также заметил, что если я попробую это на новом DataContext, производительность вернется к норме (несколько миллисекунд), но из-за архитектурной проблемы у меня не будет нового DataContext каждый раз, когда мне нужно что-то сделать.Помоги мне?Спасибо

Ответы [ 2 ]

1 голос
/ 01 марта 2012

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

int id = context.ObjectTable.Where(t=>t.Something = somethingElse).FirstOrDefault().ID

Я до сих пор не знаю почему, но этоинструкция присоединяет все данные «ObjectTable» к контексту, делая его очень медленным, «ObjectTable» также является той же таблицей, в которую я добавлял новую сущность. Установка ObjectQuery MergeOption на NoTracking Я решил проблему

Пока

0 голосов
/ 02 марта 2012

Изменить ваш запрос

int id = context.ObjectTable.Where(t=>t.Something = somethingElse).FirstOrDefault().ID

до

int id = context.ObjectTable.FirstOrDefault(t=>t.Something = somethingElse).ID

Не должно быть значительного улучшения производительности, но зачем использовать Where(), а затем FirsOrDefault().

...