#.net #multithreading #datatable
#.net #многопоточность #datatable
Вопрос:
У меня есть набор данных с несколькими таблицами данных, и я извлекаю из него строки с помощью метода findBy. Мое приложение многопоточное, и мой вопрос в том, является ли оно потокобезопасным или я должен покрыть все свои методы блокировкой, которая сделает мое приложение не многопоточным…
Комментарии:
1. Я не могу найти никаких упоминаний о методе findBy в MSDN ни для DataTable , ни для DataSet -ов. Не могли бы вы опубликовать пример кода, пожалуйста?
2. Кроме того, многопоточные приложения, требующие блокировки общих ресурсов, по-прежнему являются многопоточными приложениями…
3. @smudge: при блокировке в каждом методе не было бы большого количества потоков.
4. @Henk блокировка каждого метода не была бы правильным способом сделать ваше приложение потокобезопасным. Блокировки предназначены для общих ресурсов, будь то потокобезопасный доступ к переменным, доступ к файлам, доступ к сокету и т.д… Блокируйте ресурсы, а не весь рабочий процесс
5. верно, но это приложение, в частности, извлекает информацию из наборов данных, и это все.
Ответ №1:
Класс DataTable
Потокобезопасность
Этот тип безопасен для многопоточных операций чтения. Необходимо синхронизировать любые операции записи.
Источник: MSDN
Это должно ответить на ваш вопрос.
Комментарии:
1. В принципе, да, это должно ответить на вопрос. Но findBy — это сгенерированный метод в типизированных наборах данных, не совсем ясно, распространяется ли на него это обещание.
2. Йода, я просмотрел MSDN и увидел это предложение, но в Интернете я нашел парня, который говорит, что выбор в таблицах данных небезопасен для чтения. Вот ссылка: social.msdn.microsoft.com/Forums/en-US/adodotnetdataset/thread /…
Ответ №2:
Вы должны защищать любые операции создания / обновления / удаления с помощью логики синхронизации. По соображениям производительности не синхронизируйте чтения.
findBy не звучит так, как будто он изменяет данные. С другой стороны, как указал Matan