Является ли Interop.Domino dll thread безопасным? - PullRequest
3 голосов
/ 01 декабря 2009

Я использую Interop.Domino dll версии 1.2 в приложении c # и использую многопоточность для одновременного доступа к нескольким файлам NSF, создавая новый сеанс для каждого созданного потока (максимум 5 потоков одновременно).

Для больших файлов NSF я получал ошибку Notes, такую ​​как переполнение сегмента памяти. Чтобы преодолеть эту проблему, я использовал Marshal.ReleaseComObject (object) для выпуска необходимого Notesdocument и объекта NotesView, где это возможно.

Теперь проблема в том, что я могу получить доступ к 2 NSF-файлам, но остальные потоки собираются в dll-исключениях, так как несколько объектов Notes становятся нулевыми.

Пожалуйста, предоставьте мне некоторую помощь ....

Спасибо за помощь.

1 Ответ

2 голосов
/ 14 декабря 2011

Я недавно провел несколько экспериментов по этому же вопросу.

Я написал тестовую программу, которая запускает два разных типа потоков. Каждый поток настроен для работы с 8-10 пользователями. Каждый поток должен прочитать Domino Directory, чтобы найти почтовый файл для пользователей, и каждый поток также записывает результаты в один общий файл NSF. Но что касается основной работы с почтовыми файлами, ни один из потоков не обращается к одному и тому же NSF. Файлы NSF распространяются на два сервера. Пять потоков используют NotesDatabase.Search, а пять потоков читают NotesView и детализируют объекты NotesViewEntry. Я столкнулся с той же проблемой памяти, с которой вы столкнулись, и решил ее тем же способом - но я был очень осторожен, чтобы не выпустить объекты базы данных для Domino Directory или выходного NSF. Я запустил этот тестовый код с 10 активными потоками, без проблем.

Это обнадеживает, однако я не думаю, что это действительно достаточное доказательство того, что COM-объекты Domino полностью поточнобезопасны.

...