Pergunta

i escreveu um pequeno suplemento, que faz alguma formatação do meu código C #. nos suplementos método Exec i faça o seguinte

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;
}

quando a linha com o código "SelectedText.Text = foobar"; é chamada, VS reconstrói cada linha da etapa de seleção a passo. Você pode facilmente vê-lo fazer este passo. Mas eu não entendo, por que é que lento.

Alguma dica? TIA

Foi útil?

Solução

JFTR: Eu tive que usar TextSelection.Insert (...), mas também obter estúdios profundidade visual de recuo, eu também tive que mexer com o texto selecionado para abranger a seleção também sobre a primeira e última linha completa:

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();

Eu realmente não sei wether esta é uma boa maneira de textselections alter mas funciona bem e é muito mais rápido do que o código suplemento originais

Outras dicas

Eu não tenho trabalhado com suplementos, mas já que você pediu apenas para um 'dica', aqui é meu.

Tente desativar atualização da tela antes de fazer a tarefa.

Além disso, o arquivo de ajuda diz:

"Quando a propriedade Text é definida, o valor de texto é inserido na frente do texto selecionado e, em seguida, entrou em colapso, semelhante ao que acontece quando o texto é colado em um documento. Note que esta propriedade se comporta exatamente como quando digitação quando o editor está na inserção (isto é, não sobrescrever) mode. Qualquer texto após o caractere 128th é truncado. "

Isso parece implicar que a variável não é ovewritten como esperado, mas anexado em vez disso e, em seguida, o texto anterior é removido. Tentar esvaziar a variável primeiro e ver se ele muda nada.

Além disso, considere o uso do PasteMethod para substituir o texto em vez de atribuir.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top