Является ли реализация составного файла IStorage поточно-ориентированной?

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

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

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

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

1 ответ

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

Другие вопросы по тегам