моя надстройка vs2008 для форматирования текста работает очень медленно

StackOverflow https://stackoverflow.com/questions/1063719

Вопрос

я написал небольшую надстройку, которая форматирует мой код 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 для замены текста вместо присвоения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top