Как мне использовать EF4 в многопоточном приложении WinForms? - PullRequest
0 голосов
/ 02 января 2011

У меня есть приложение winforms, которое просто читает файлы журнала. Теперь, поскольку у меня есть несколько файлов журналов (скажем, 20-30), я попытался сделать приложение winform многопоточным, чтобы оно могло читать несколько файлов журнала одновременно.

Но я не уверен, как мне поступить с сохранением данных файла журнала.

1. Один контекст на тему

Например, должен ли каждый поточный файл журнала анализироваться, иметь собственный контекст EF4 и сохранять (например, каждые 1000 записей или когда EOF)

или

2. Один контекст для темы WinForm

Если приложение winform имеет единственный контекст, каждый фоновый поток сообщает отчет с коллекцией записей файла журнала, а основной поток winform сохраняет его каждые x записей или x секунд или что-то ...

Я просто не уверен, куда мне следует помещать контекст ... и что еще более важно ... почему я должен ставить его где-нибудь .

У кого-нибудь есть предложения?

Ответы [ 2 ]

3 голосов
/ 02 января 2011

По сути, контекст EF может использоваться только из потока, который его создал.Некоторые вещи могут работать должным образом, если вы используете контекст в разных потоках, но нет никакой гарантии, так как ObjectContext не является потокобезопасным в соответствии с документацией.Например, отложенная загрузка, кажется, не работает между потоками .


Чтобы ответить на ваш вопрос, я думаю, что ваш первый вариант (один контекст для потока) является лучшим (при условииВы ограничиваете количество одновременных потоков).Наличие всех рабочих потоков, вызывающих форму для вставки данных, заморозит пользовательский интерфейс и помешает эффективной работе рабочих потоков.

0 голосов
/ 02 января 2011

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

Если вас беспокоит производительность, вы должны определить, какой подход работает лучше. Это может зависеть в основном от вашей системы баз данных / макета таблицы.

...