AvalonEdit
AvalonEdit copied to clipboard
The code completion effiencency can be improved
In the project ICSharpCode.AvalonEdit.Sample
, the code about code completion is shown below.
void textEditor_TextArea_TextEntered(object sender, TextCompositionEventArgs e)
{
if (e.Text == ".") {
// open code completion after the user has pressed dot:
completionWindow = new CompletionWindow(textEditor.TextArea);
// provide AvalonEdit with the data:
IList<ICompletionData> data = completionWindow.CompletionList.CompletionData;
data.Add(new MyCompletionData("Item1"));
data.Add(new MyCompletionData("Item2"));
data.Add(new MyCompletionData("Item3"));
data.Add(new MyCompletionData("Another item"));
completionWindow.Show();
completionWindow.Closed += delegate {
completionWindow = null;
};
}
}
Every time before the completion window is used, it needs to be created. It wastes much computing force, especially when the CompletionData is large
So, I think there are two approaches below to improve.
- Create the completion window only one time. When it's needed, activated it.
-
CompletionWindow.CompletionList.CompletionData
should be writable for users. In this way, we can create the data only once. Every time the completion window is needed, we can pass the data toCompletionData
.