Переход на MTA требует от вас выполнения всех необходимых блокировок для защиты состояния вашего компонента. И это добавит накладные расходы на переключение потоков, поскольку пользовательский интерфейс Excel работает в определенном потоке, который будет блокировать 1 при вызове перекрестного потока в ваш компонент. Другой процесс уже влечет за собой перекрестные издержки, поэтому никаких реальных изменений там нет.
Вы можете избежать межпотоковых накладных расходов Excel, пометив модель компонента как модель потоков «Нейтральная» & mdash; она все еще может использоваться из любого потока, даже если она не привязана к существованию в MTA (т.е. все вызовы в процессе будут прямой, без ниток). Запишите его как свободный поток (все блокировки все еще необходимы), но просто измените регистрацию.
Учитывая все усилия, чтобы гарантировать, что ваш компонент является поточно-ориентированным, вы можете обнаружить, что нет никакого преимущества, если несколько вызовов в ваш компонент не могут действительно выполняться одновременно. Если вы просто берете блокировку на время каждого метода, вы ничего не сохраняете, будучи в STA. Более тонкая блокировка может дать преимущество, но вам необходим более подробный анализ возможного параллелизма, а затем профилирование, чтобы доказать, что вы смогли его достичь. Посмотрите на Закон Амдала , чтобы охватить эти вопросы.
1 Это очень упрощенно ... реальная ситуация довольно сложна.