моя надстройка vs2008 для форматирования текста работает очень медленно
-
21-08-2019 - |
Вопрос
я написал небольшую надстройку, которая форматирует мой код C#.в методе addins Exec я делаю следующее
try {
TextSelection selection = (EnvDTE.TextSelection)_applicationObject.ActiveDocument.Selection;
String foo = String.Empty;
if (!text.IsEmpty) {
foo = someCoolObjectThatFormatsText.Format(selection.Text);
selection.Text = foo; // here everything gets painfully slow :-(
}
}
catch (Exception) {
throw;
}
Когда строка с кодом "selectedText.text = foobar;" это вызов, VS восстанавливает каждую строку выбора шаг за шагом.Вы можете легко наблюдать, как он выполняет этот шаг.Но я не понимаю, почему так медленно.
Есть какие-нибудь подсказки?ТИА
Решение
JFTR:Мне пришлось использовать TextSelection.Insert(...), но чтобы также получить глубину отступов визуальных студий, мне также пришлось возиться с выделенным текстом, чтобы охватить выделение также всей первой и последней строкой:
TextSelection text = (EnvDTE.TextSelection)_applicationObject.ActiveDocument.Selection;
text.SmartFormat(); // sets the correct indention als studio
/* the following lines will expand the selection to whole lines: */
int lineSpan = text.BottomPoint.Line - text.TopPoint.Line;
text.MoveToPoint(text.TopPoint,false);
text.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstColumn,false);
text.LineDown(true,lineSpan);
text.EndOfLine(true);
/* and now my custom textformatting */
text.Insert(someCoolObjectThatFormatsText.Format(text.Text),(int)vsInsertFlags.vsInsertFlagsContainNewText);
text.Collapse();
Я действительно не знаю, хороший ли это способ изменить выделение текста, но он работает нормально и намного быстрее, чем исходный код надстройки.
Другие советы
Я не работал с надстройками, но поскольку вы просили только «подсказку», вот моя.
Попробуйте отключить обновление экрана, прежде чем выполнять задание.
Также в файле справки написано:
«Когда свойство Text установлено, значение Text вставляется перед выделенным текстом, а затем сворачивается, аналогично тому, что происходит, когда текст вставляется в документ.Обратите внимание, что это свойство ведет себя так же, как при вводе текста, когда редактор находится в режиме вставки (то есть без перепечатки).Любой текст после 128-го символа обрезается».
Похоже, это означает, что переменная не перезаписывается, как ожидалось, а вместо этого добавляется, а затем предыдущий текст удаляется.Попробуйте сначала очистить переменную и посмотреть, изменится ли она что-нибудь.
Кроме того, рассмотрите возможность использования PasteMethod для замены текста вместо присвоения.