Автоматизация Word - CopyFormat в цикле = медленно
Я пытаюсь скопировать / вставить форматирование поля в Word. (Microsoft.Office.Interop.Word)
Моя цель - скопировать форматирование, обновить поле и вставить форматирование, чтобы применить его к новому содержимому. (в моем тестовом коде часть обновления и вставки не указана)
Я заметил, что это становится очень медленным в большой петле. У меня есть +- 5000 полей в моем документе Word. После + -500 итераций выполнение одной итерации занимает до 1,2 секунды (только для кода внизу этого поста). После того, как он достигает 1,2 секунды, продолжительность больше не увеличивается (возможно, это связано с буфером).
Может кто-нибудь дать мне решение по улучшению скорости?
foreach (Field o in m_doc.Fields)
{
if (o.Type == WdFieldType.wdFieldRef)
{
o.Select();
Range r = o.Result;
r.Select();
m_doc.Application.Selection.CopyFormat();
}
}
1 ответ
Я немного цепляюсь за соломинку, но здесь...
Конечно, вы можете немного ускорить процесс, не используя o.Select(); В этом нет необходимости, и каждый ваш вызов SELECT заметно повлияет на производительность.
Медлительность - известная проблема в циклах foreach - она связана с тем, как API работает с документом. Насколько я помню, он более или менее имеет тенденцию начинаться с начала и отсчитываться вперед в каждом цикле. Цикл for, использующий счетчик индекса, имеет тенденцию быть быстрее. И в некоторых случаях цикл for, который заполняет BACKWARDS, может быть даже более эффективным.