【发布时间】:2015-08-11 15:16:28
【问题描述】:
我创建了一个 c# WPF 项目,我必须处理一个包含一些记录的 csv 文件,这些记录可能不限于几百或几千或几百万。我需要读取记录行,然后处理通常需要 5 到 10 秒的记录,然后用新值更新记录。
该操作包括通过网络服务对服务器进行网络调用,然后服务器调用另一台服务器连接到权限服务器,权限服务器按照请求在同一循环中返回数据。该权限需要时间,因为它拥有一个非常大的数据库,其中包含大约十亿条记录。因此,加密解密和身份验证操作大约需要 5-10 秒才能完成。
我不能在一个线程中执行操作,因为处理整个文件可能需要几个月的时间,所以我想创建数百个线程来处理数据。我正在考虑的方法是,我正在尝试创建一个线程,该线程创建最多 100 个线程并监视它们是否有可用线程。当线程在处理后返回数据时,它会将其写入文件并创建新线程以供新行处理。
我认为的这种方法似乎太复杂了,我是否应该实施相同的方法以及我应该如何或如何解决问题。
【问题讨论】:
-
@YuvalItzchakov:我没有看到任何迹象表明 OP 受 OP 工作的约束。它正在处理需要 5-10 秒的记录,我们不知道该处理由什么组成。
-
@JonSkeet OP 认为在专用线程上读取每一行将有助于提高性能。
-
处理包括什么?如果您受 CPU 限制,那么创建 100 多个线程可能不是一个好主意。如果您正在等待 Web 服务或类似的东西, 是否可以扩展到数百个并行请求?并行 LINQ 或 TPL 数据流在这里可能是合适的。
-
@YuvalItzchakov:不,OP 认为在专用线程上处理每一行将有助于提高性能,而且可能很好。
-
@JonSkeet 当然可以。但是 OPs 的问题太模糊了。
标签: c# .net wpf multithreading file