c# - 定期将文本输出到 Windows 窗体 - 速度问题

标签 c# winforms

我有一个相当密集的应用程序,我刚刚将其从控制台应用程序转换为 Windows 窗体应用程序。该程序基本上遍历了数千名客户,并根据他们的交货情况创建发票。对于每次交付和客户,信息都会输出到控制台窗口——这意味着要输出大量信息!旧流程最多需要 20 分钟,考虑到它正在做的事情的规模,这是合理的。但我的经理和客户现在希望将其作为 Windows 窗体。

我已经实现了这个,为了输出信息,我做了一些欺骗,简单地替换了现有代码中的所有 Console.WriteLine() 调用以调用我的方法,该方法附加给定的文本到 Windows 窗体上的文本框。

我遇到了两个问题:

1:文本框偶尔会“卡住”并变白 - 但我假设我不能使用超过 1 个线程,因为我会定期在不同线程上调用文本框

2:更严重的是,以前 20 分钟的过程现在需要更长的时间 - 大约 4-5 小时。我确定数据集没有显着扩大,为了测试我们回滚到旧位置的所有代码,我能想到的唯一问题是我附加到文本框。明天我将在没有任何文本框写入的情况下进行测试以确认这一点,但代码没有以任何其他方式更改

是否有任何其他更简单的方法可以每秒多次将文本输出到 Windows 窗体?

最佳答案

最好不要将所有数据直接输出到文本框中。

而是启动第二个线程来处理处理。每隔一段时间(20 条记录?100 条?)将该线程与主线程同步以更新某种类型的进度条。

让线程将正常的文本更新写入数据库或文本文件。

完成后,加载该文本文件并显示给用户。

几乎所有的额外时间都花在了应用程序的主线程重绘表单上;这是一个昂贵的过程。当它这样做时,处理基本上被阻塞(同一个线程)。因为文本框中的数据量在增长,所以它花费在更新上的时间随着每次附加到文本框而线性增加......因此,10 条记录不会注意到太大的影响。 1000 多个将..取决于您附加的数据量。

关于c# - 定期将文本输出到 Windows 窗体 - 速度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6575121/

相关文章:

c# - 将 <keyword> 与行尾/行首的空格匹配

c# - 如何判断XmlTextReader已经读取了多少数据?

C# OpenTK - 纹理四边形

c# - 处理新表格的正确方法

c# - 如何打印 .rtf 文件?

c# - 大数据量的 MemoryStream 替代方案

c# - datagridview 无法正确自动调整大小

c# - 当程序在弱计算机上运行时,进度条不会更新

c# - 如何增加 WinForms 中 ListViewItems 的 AutoPopDelay 值?

c# - winforms调整控件以在其他控件不可见时垂直向上推