我有一个相当密集的应用程序,我刚从控制台应用程序转换为Windows窗体应用程序.该计划基本上遍历了数千名客户,并根据他们的交付创建发票.对于每个交付和客户,信息将输出到控制台窗口 - 这意味着输出了大量信息!旧的过程需要多达20分钟,考虑到它正在做的规模,这是合理的.但是我的经理和客户现在想要它作为Windows窗体.
我已经实现了这一点,并输出我作弊的信息,并简单地替换现有代码中的所有Console.WriteLine()调用来调用我的方法,将给定的文本附加到Windows窗体上的TextBox.
我有两个问题:
1:文本框偶尔会"冻结"并变白 - 但我认为我不能使用超过1个线程,因为我会定期在不同的线程上调用文本框
2:更严重的是,之前的20分钟过程需要更长的时间 - 大约4-5小时.我确信数据集没有被大幅放大,以便测试我们回滚到旧位置的所有代码,我能想到的唯一问题是我附加到文本框.我将在明天没有任何文本框写入测试以确认这一点,但代码没有以任何其他方式改变
有没有其他更简单的方法将文本输出到Windows窗体,每秒多次?
这里你最好的选择是不要将所有数据直接输出到文本框中.
而是启动第二个线程来处理处理.每隔一段时间(20条记录?100?)将该线程与主线程同步以更新某种类型的进度条.
让线程将正常的文本更新写入数据库或文本文件.
完成后,加载该文本文件并显示给用户.
几乎所有的额外时间都花在应用程序的主线程重绘表单上; 这是一个昂贵的过程.当它这样做时,处理基本上被阻止(相同的线程).由于文本框中的数据量增加,因此每次附加到文本框时,花费更新所花费的时间会线性增加...因此,10条记录不会发现太大的影响.1000+将...取决于您追加的数据量.
| 归档时间: |
|
| 查看次数: |
910 次 |
| 最近记录: |