2010-01-19 10 views
4

J'ai une chaîne massive (nous parlons 1696108 caractères) que j'ai lu très rapidement à partir d'un fichier texte. Lorsque je l'ajoute à ma zone de texte (C#), cela prend beaucoup de temps. Un programme comme Notepad ++ (code non géré, je sais) peut le faire presque instantanément, même si le Bloc-notes prend également beaucoup de temps. Comment puis-je ajouter efficacement cette énorme chaîne et comment quelque chose comme Notepad ++ le fait si vite?Comment puis-je ajouter une énorme chaîne à une zone de texte de manière efficace?

Répondre

5

La classe Bloc-notes et fenêtre TextBox est optimisée pour le texte 64K. Vous devez utiliser RichTextBox

0

Vous pouvez, au départ, simplement rendre les n premiers caractères visibles dans l'interface utilisateur (en supposant que vous ayez une zone de texte déroulante). Ensuite, démarrez un thread distinct pour rendre les blocs successifs de manière asynchrone.

Vous pouvez également le combiner avec votre flux d'entrée à partir du fichier. Lire un morceau et l'ajouter immédiatement à la zone de texte. Exemple (non exhaustive, mais vous voyez l'idée) ...

private void PopulateTextBoxWithFileContents(string path, TextBox textBox) 
{ 
    using (var fs = File.OpenRead(path)) 
    { 
     using (var sr = new StreamReader(fs)) 
     { 
      while (!sr.EndOfStream) 
       textBox.Text += sr.ReadLine();       

      sr.Close();      
     } 

     fs.Close(); 
    } 
} 
9

Si cela est Windows Forms Je suggère d'essayer RichTextBox comme solution de remplacement pour votre TextBox. Dans le passé, je l'ai trouvé beaucoup plus efficace pour gérer du texte volumineux. De même, lorsque vous effectuez des modifications sur place, veillez à utiliser la méthode SelectionStart/SelectedText testée dans le temps au lieu de manipuler la propriété Text.

rtb.SelectionStart = rtb.TextLength; 
rtb.SelectedText = "inserted text"; // faster 

rtb.Text += "inserted text"; // slower 
Questions connexes