Является ли реализация составного файла IStorage поточно-ориентированной? - PullRequest
4 голосов
/ 08 ноября 2008

Я использую реализацию составного файла IStorage из C # (StgCreateDocfile).

Безопасно ли обращаться к одному экземпляру IStorage / IStream из нескольких потоков, если я сам синхронизировал чтение и запись? Или есть какие-либо проблемы с COM, которые могут быть здесь проблемными?

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

Я уже написал стресс-тест для своей реализации, и он не показал никаких проблем, но я должен быть уверен на 100%. Я не нашел эту информацию в документах MSDN.

1 Ответ

1 голос
/ 09 ноября 2008

Туф один. Об этом есть фрагмент в документации по интерфейсу ILockBytes. Это говорит о том, что стандартные реализации IStorage и IStream реализуют IMarshal. Что сделает их поточно-ориентированными, если вы будете следовать правилам COM-потоков. Это легко забыть, когда указатели интерфейса находятся в работе. Вы должны будете использовать что-то вроде CoMarshalInterThreadInterfaceInStream () или IGlobalInterfaceTable. Вы можете избежать маршалинга, заперев себя.

...