声明变量会降低程序速度

时间:2015-05-23 19:36:46

标签: c# winforms

我有一个使用RichTextBox(它是Tab Control的一部分)的程序,而在TextChanged事件中我有这些变量声明:

RichTextBox programTextBox = (RichTextBox)tabControl.TabPages[tabControl.SelectedIndex].Controls[0];
int selectStart = programTextBox.SelectionStart;
int programCurrentLine = programTextBox.GetLineFromCharIndex(programTextBox.SelectionStart);
int programCurrentLineIndex = programTextBox.GetFirstCharIndexFromLine(programCurrentLine);
int programCurrentLineLength = programTextBox.Lines[programCurrentLine].Length;
string programCurrentLineText = programTextBox.Lines[programCurrentLine].ToString();

所有这些在特定事件中都很重要,我多次使用它们以达到多种目的。但是,每次重新计算都会减慢我的程序。

例如,我注意到如果我打开一个稍大的文件(使用我的RichTextBox),然后开始按下例如'a'按钮,有一些明显的滞后。除了这些变量的声明之外,删除除了这些变量之外的每一段代码都没有任何帮助,但是删除上面的代码,完全解决了这个问题。

我有两个问题:1)为什么这些声明会减慢TextChanged事件的速度,2)我该怎么办? (有更快的方法来计算这些变量吗?)

2 个答案:

答案 0 :(得分:1)

它不是变量声明 - 它是您用来初始化它们的代码。我发现GetFirstCharIndexFromLineLines费用很高,我不会惊讶地发现所有 - 目前您正在两次调用Lines财产

你可以通过删除其中一个// No need to call ToString() - Lines is a string[] string programCurrentLineText = programTextBox.Lines[programCurrentLine]; int programCurrentLineLength = programCurrentLineText.Length; 调用来改善问题,只需首先获取行,然后查看其长度:

{{1}}

令人遗憾的是,没有任何方式可以说"获取有关给定索引位置的所有信息:它的行,行中的第一个char索引,以及行本身&#34 ;在一个电话中:(

答案 1 :(得分:0)

如果在每次按键时重新计算都不重要,那么最好实现一个在按键上设置的布尔变量,然后有一个计时器来重置它。例如,在事件上添加1.2秒的延迟。我不确定您的应用程序的需求,以便时间可能有点多。