Ваша обработка массива сбора неэффективна. Подумайте о том, чтобы прочитать весь реестр клиентов в массив с помощью MyArray = Range.Value. Затем подготовьте выходной массив в памяти и запишите его на лист после того, как все циклы будут выполнены, за один раз, с TargetRange.Value = collect.
Избегайте вставки строк. Что не так с существующим? Если вы готовите все данные в массиве для вставки на лист, пустые элементы массива будут создавать пустые ячейки листа. Таким образом можно избежать вставки, и все, что вам нужно сделать, это отформатировать.
Существует время для каждого доступа к рабочему листу, будь то чтение или запись. Даже для форматирования попробуйте создать диапазоны, которые обрабатываются одинаково. Избегайте доступа к листу в виде петель.
Можно найти дискуссии об этой реализации функции в повышении там: http://lists.boost.org/Archives/boost/2008/11/144803.php
> Может N2427 - C++ Атомарные Типы и Операции быть реализованным
> без справки компилятора?
Нет.
Они не должны быть intrinsics, если можно записать встроенный ассемблер (или отдельно скомпилированный ассемблер в этом отношении) затем, можно записать сами операции непосредственно. Вы могли бы даже смочь использовать простой C++ (например, просто присвоение для загрузки или хранилища). Причина Вам нужна поддержка компилятора, предотвращает несоответствующую оптимизацию: атомарные операции не могут быть оптимизированы и обычно не должны переупорядочиваться прежде или после никаких других операций. Это означает, что даже неатомарные хранилища, выполненные перед атомарным хранилищем, должны быть завершены, и не могут кэшироваться в регистре (например). Кроме того, загрузки, которые происходят после атомарной операции, не могут быть подняты перед атомарным op. На некоторых компиляторах, просто с помощью встроенного ассемблера достаточно. На других, вызывая внешнюю функцию достаточно. MSVC обеспечивает _ReadWriteBarrier () для обеспечения упорядочивания компилятора. Для других компиляторов нужны другие флаги.