gpt4 book ai didi

c# - WPF TextBox 绑定(bind)到 StringBuilder 以模拟控制台性能

转载 作者:太空宇宙 更新时间:2023-11-03 22:33:47 25 4
gpt4 key购买 nike

所以我想将我的控制台输出重定向到 TextBox 以模拟 GUI 内控制台。现在我看到了这个帖子:

https://stackoverflow.com/a/18727100/6871623

这有助于重定向过程。

但是,由于字符串是不可变的,这意味着每次写入都会分配一个新字符串,这不是很有效。

因此,我想到了像这样使用 StringBuilder:

public class ControlWriter : TextWriter
{
private Control textbox;
private StringBuilder builder;

public ControlWriter(Control textbox)
{
this.textbox = textbox;
builder = new StringBuilder();
}

public override void Write(char value)
{
builder.Append(value);
textbox.Text = builder.ToString();
}

public override void Write(string value)
{
builder.Append(value);
textbox.Text = builder.ToString();
}

public override Encoding Encoding
{
get { return Encoding.ASCII; }
}
}

看代码,每次调用builder.ToString()都会分配一个新的字符串,性能似乎并没有太大提升,主要是我们改进的是Append 部分,因为现在我们不会每次都使用字符串连接。

有没有办法将 TextBox Text 直接绑定(bind)到 StringBuilder?也就是说,添加或重置 StringBuilder 会自动反射(reflect)在 GUI 上吗?

如果 TextBox 无法做到这一点,是否有另一种解决方法?

最后,有没有办法提高上面代码的性能?

最佳答案

因为这都是假设,我会尽我所能回答。

  1. Console 不是字符串,也不是StringBuilder,它实际上是一个缓冲区char(松散使用的术语)的多维数组

  2. TextBox字符串 支持。

  3. StringBuilderchar一维数组,可以转换为字符串使用 ToString()

因此,用 无尽 chars 流更新 string 迟早会触底。这意味着,在某些时候,您会在 TextBox 上喷洒出无穷无尽的字符,而这些字符 没有 的概念。

如果你想让这个更真实,也许你想要一个 Listarray 而不是 string问题。但是,这样做至少可以让您缓冲一定数量的数据,或者至少以某种方式虚拟化它。

此外,您不能在这里忽略分配,每次您对字符串执行某些操作时,您都会再次分配。

然后你谈论绑定(bind)...绑定(bind)不会帮助分配

要回答你的问题,你需要问自己更多的问题。您可以可视化数据的最佳方式是什么,您可以虚拟化它吗,您将如何处理线

对于 textbox 的简单练习,你正在做的很好。然而,在此之上提出任何其他建议都非常困难且范围太广。

关于c# - WPF TextBox 绑定(bind)到 StringBuilder 以模拟控制台性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56121671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com