Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有其他方法将文本附加到Textbox控件?_C#_.net_Textbox_Winforms - Fatal编程技术网

C# 是否有其他方法将文本附加到Textbox控件?

C# 是否有其他方法将文本附加到Textbox控件?,c#,.net,textbox,winforms,C#,.net,Textbox,Winforms,我有一个自定义的日志框架,可以写入System.Windows.Forms.TextBox。我现在向文本框中写入内容的方式如下: tbLog.Text += newLogEntry.Text; 这种方法的问题是,每次执行时,tbLog.Text和newLogEntry.Text中的字符串都会连接起来,然后分配给tbLog.Text。随着文本框中日志的增长,操作变得非常占用内存,速度也越来越慢 有什么方法可以更快、更有效地执行此操作吗?问题在于,将一个字符串附加到另一个字符串后,每次都会产生一个

我有一个自定义的日志框架,可以写入System.Windows.Forms.TextBox。我现在向文本框中写入内容的方式如下:

tbLog.Text += newLogEntry.Text;
这种方法的问题是,每次执行时,tbLog.Text和newLogEntry.Text中的字符串都会连接起来,然后分配给tbLog.Text。随着文本框中日志的增长,操作变得非常占用内存,速度也越来越慢


有什么方法可以更快、更有效地执行此操作吗?

问题在于,将一个字符串附加到另一个字符串后,每次都会产生一个新字符串。 这可能是相当昂贵的,当你做很多Concat

如果我是你,我不会直接登录到文本框。我只需要跟踪所有日志消息,并使用文本框来可视化日志。 例如,通过这样做,您可以选择将日志保存到文本文件,或者选择以任何其他方式可视化日志

例如,您可以将消息保存在
StringCollection
列表中。例如,您可以使用列表框,而不是在文本框中可视化它,并且每次向日志添加新项时,您都可以向列表框添加新项。
但是,我会确保这不是紧密耦合的。
例如,日志类可以在每次将新消息保存到日志时触发事件。

然后,您可以拥有不同的“观察者”,通过订阅事件来跟踪日志,并在每次引发事件时采取适当的操作。

问题在于,将一个字符串附加到另一个字符串后,每次都会产生一个新字符串。 这可能是相当昂贵的,当你做很多Concat

如果我是你,我不会直接登录到文本框。我只需要跟踪所有日志消息,并使用文本框来可视化日志。 例如,通过这样做,您可以选择将日志保存到文本文件,或者选择以任何其他方式可视化日志

例如,您可以将消息保存在
StringCollection
列表中。例如,您可以使用列表框,而不是在文本框中可视化它,并且每次向日志添加新项时,您都可以向列表框添加新项。
但是,我会确保这不是紧密耦合的。
例如,日志类可以在每次将新消息保存到日志时触发事件。

然后,您可以拥有不同的“观察者”,通过订阅事件来跟踪日志,并在每次引发事件时采取适当的操作。

我个人会首先使用.Append()在StringBuilder中完成所有工作。然后,我将使用StringBuilder上的.ToString()方法设置textbox文本属性

就我个人而言,我会首先使用.Append()在StringBuilder中完成所有工作。然后,我将使用StringBuilder上的.ToString()方法设置textbox文本属性

文本框有一个函数
AppendText()
。您应该改为使用它,因为它比
+=
运算符好得多。

文本框有一个函数
AppendText()
。您应该改用它,因为它比
+=
操作符好得多。

为什么要登录到文本框?应用程序关闭时,您将丢失日志。它必须保留完整的历史记录,还是只保留最新的x条目?为什么要登录到文本框?应用程序关闭时,您将丢失日志。它必须保留完整的历史记录,还是只保留最新的x条目?不,您没有使用stringbuilder.Ok。我误解了你的回答。。我想你的意思是我应该这样做:var sb=newstringbuilder(tbLog.Text);sb.AppendLine(newLogEntry.Text);tbLog.Text=sb.ToString(),但现在我在logger类中使用字符串生成器作为类变量,每次新条目文件由..附加到它。不,您没有使用stringbuilder.Ok。我误解了你的回答。。我想你的意思是我应该这样做:var sb=newstringbuilder(tbLog.Text);sb.AppendLine(newLogEntry.Text);tbLog.Text=sb.ToString(),但现在我在logger类中使用字符串生成器作为类变量,每次通过..创建新的条目文件时都将其追加。。