Параллельная задача Entity Framework против WCF - PullRequest
1 голос
/ 21 ноября 2011

Мне нужно вставить некоторые данные, и я делаю это, вызывая WCF из моего пользовательского интерфейса и передавая список объектов.Затем служба вызывает нижний бизнес-уровень, который последовательно вставляет элементы (вызывает несколько других менеджеров и выполняет много вызовов / вставок через ObjectContext)

Теперь проблема, которую я не могу понять, заключается в следующем:

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

  • Если я пытаюсь вызвать параллельный foreach в классе обслуживания, я получаю исключение, потому что ObjectContext не является поточно-ориентированным, но я не могу блокировать код каждый раз, когда использую егопотому что это происходит слишком много раз

Почему, если я звоню в WCF, это работает?Есть ли способ сделать то же самое в моем классе менеджера?

Спасибо

1 Ответ

3 голосов
/ 21 ноября 2011

В зависимости от конфигурации вашей службы новый экземпляр создается для каждого параллельного вызова службы. Но использование параллельного цикла внутри службы приведет к тому, что один и тот же ObjectContext будет использоваться несколько раз. Таким образом, в основном, вызов параллельного интерфейса через WCF создает несколько объектов ObjectContexts, где при выполнении в службе WCF используется только один (который, как вы знаете, не является потокобезопасным). В зависимости от характера ваших вставок это может быть хорошо. Вы также можете раскрутить несколько ObjectContexts внутри службы.

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

...