Вы погружаетесь в мир моделей потоков COM.Это хорошее начало, как и любое другое: http://msdn.microsoft.com/en-us/library/ms693344(VS.85).aspx.
Если код выполняется в главном потоке Excel (что достигается путем настройки Dispatcher), вызовы COM не маршалируются в разных потоках.Поскольку у вас много COM-вызовов (каждый .Value считается за один), накладные расходы складываются с теми различиями, которые вы видите.
Одна из причин, по которой маршалинг в этом контексте дорогостоящий, заключается в том, что COM-объекты Excel работают в однопоточном хранилище (STA), что означает, что установлен цикл обработки сообщений (фактически Windows).цикл сообщений) в Excel для сериализации вызовов COM.Каждый вызов между квартирами, который вы делаете, приводит к тому, что сообщение отправляется в этот цикл сообщений, который обрабатывается в главном потоке Excel.
Таким образом, эти два случая отличаются по производительности из-за маршалинга COM между квартирами.Это на самом деле удивительно быстро, учитывая то, что происходит за кулисами.
В обоих случаях выполнение одного вызова для установки большого значения .Value для массива значений будет намного быстрее.А для самого быстрого (миллион ячеек в секунду) способа ввода данных в таблицу Excel см. Здесь: Самый быстрый способ взаимодействия между живыми (несохраненными) данными Excel и объектами C # .