シンタックスカラーリングツールを作っています。私は現在、キーワードを見つけて強調表示する方法を書いています.ex if then else..これを行うためのより良い(より速く、より美的な)方法があると確信しています。
以下に 2 つの方法を示します。最初の方法は、速度を向上させるために長さ以外の文字列メソッドを使用しないようにします。
2 番目に文字列メソッドを使用しましたが、最初の方法よりも遅いと言われました。
どちらの方法が速いですか?そして最初のものについては、スペースがその単語の後にある場合にのみ単語が強調表示されますが、それに対する救済策はありますか?
コード:
private string[] m_keywords = new string[] { "GOTO", "IF", "THEN", "ELSE", "WHILE", "DO" };
private int m_nShortestKeywordLength = 2;
// lcpy_strLine is a copy in all uppercase of the current line I am processing
private void ProcessKeywords(Color clr)
{
if(lcpy_strLine.Length > m_nShortestKeywordLength)
for (int i = 0; i < m_keywords.Length; i++)
{
string curWord = m_keywords[i];
int len = curWord.Length;
for (int j = 0; j < lcpy_strLine.Length; j++)
{
if (j + len < lcpy_strLine.Length)
{
int k = 0;
while (k < len && lcpy_strLine[j + k] == curWord[k])
k++;
if (k == len)
{
Console.WriteLine("Found Keyword");
SelectionStart = m_nLineStart + j;
SelectionLength = k;
SelectionColor = clr;
}
}
}
}
}
private void ProcessKeywords2(Color clr)
{
/*for (int i = 0; i < m_keywords.Length; i++)
if (lcpy_strLine.Contains(m_keywords[i]))
{
int indx1 = lcpy_strLine.IndexOf(m_keywords[i]);
SelectionStart = m_nLineStart + indx1;
SelectionLength = m_keywords[i].Length;
SelectionColor = clr;
}*/
}