我google搜索关于这个一些建议,我发现了一些链接。最明显的是this one,但最后我想知道的是我的代码实现得如何。阅读从多个线程相同的文件在C#中
我基本上有两类。一个是转换,另一个是ConverterThread
我创建一个具有属性ThreadNumber,告诉我有多少线程应该在同一时间运行该转换器类的一个实例(这是从用户读取)因为这个应用程序将用于多CPU系统(物理上,如8 cpu),所以它是suppossed,这将加速导入
该转换器实例读取一个文件,范围可以从100MB到800MB,每行此文件是一个制表符分隔的值记录,它被导入到另一个目标,如数据库。
ConverterThread类只是在线程内运行(新线程(ConverterThread.StartThread))并且有事件通知,所以当它的工作完成后它可以通知Converter类,然后我可以总结所有这些线程的进度,通知用户(例如在GUI中)已经导入了多少个这样的记录以及已经读取了多少个字节。
然而,我有一些麻烦,因为我得到有关该文件不能被读取的随机错误,或进度(百分比)的总和超过100%,这是不可能的,我认为发生这种情况是因为线程管理不善,并且可能由事件返回的信息格式错误(因为它从一个线程“传播”到另一个线程)
您有任何关于线程实现的更好实践的建议,所以我可以完成这个?
在此先感谢。
肯定与其他海报的情绪同意时,他们说,使用多线程的复杂性/难度可能会超过任何速度优势...... –
添加线程可以很好地提高读取性能。我以此为基准。请参阅http://stackoverflow.com/questions/1033065/will-using-multiple-threads-with-a-randomaccessfile-help-performance/1254378#1254378。 –
好了,所以我最后用一个单独的线程来读取大文件和创造尽可能多的文件,主题配置,所以如果用户设置4个线程我把4个不同的文件,这个大文件的用户结束。一旦线程完成,我创建4个线程,每个线程读取不同的文件并处理每条记录。我没有基准测试,但我会让你知道。感谢所有的答复。 –