首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# 4.0中的多线程文件加载

C# 4.0中的多线程文件加载
EN

Stack Overflow用户
提问于 2012-10-02 02:48:15
回答 4查看 207关注 0票数 3

我需要压缩每个文本文件并复制到另一个服务器。文件大小可能在500MB到8 8GB之间。每个文件中都没有依赖项。我有35个Appx文件。

我的常规代码需要appx 3-4个小时。为了减少时间,我正在考虑为这个实现线程。你认为线程化可以减少时间吗,还是有其他最好的方法来做到这一点。

EN

回答 4

Stack Overflow用户

发布于 2012-10-02 03:24:14

.Net 4.0有一个新的Threading.Task命名空间,这使得调度任务变得更加容易,而不必深入到线程调度中。

它允许您将后续任务排入队列,以便在前一个任务完成后运行(无论成功还是失败)。

http://msdn.microsoft.com/en-us/library/system.threading.tasks.aspx

http://www.codethinked.com/net-40-and-systemthreadingtasks

但是,正如前面的评论者所建议的那样,如果瓶颈不是CPU进行文件压缩,而是网络传输,那么它可能没有太大帮助。

票数 1
EN

Stack Overflow用户

发布于 2012-10-02 03:28:18

我建议你使用Task.Factory.StartNew,因为在默认情况下,它会为每个内核创建一个线程,并让另一个线程排队。

票数 1
EN

Stack Overflow用户

发布于 2012-10-02 04:01:53

根据我处理大文件的经验,由于硬盘读/写本身和/或网络的限制,多线程并不能加快处理速度。

您不仅要对硬盘进行大量的读写操作,还需要通过网络将大文件复制到另一台计算机上。

如果您的平均文件大小是4.25 GB,那么我们要处理的存储空间就是148.75 GB(按35个文件计数)。这是一个很大的空间,你不仅要把所有的空间读到内存中(希望不是一次读完所有的空间,否则虚拟内存会开始发挥作用,它会把更多的空间写到你的硬盘上),你还会把其中的一些空间写回一个zip文件。

将这个因素添加到网络上的文件传输中,如果你的网络是我必须处理的典型网络,我对你得到的时间并不感到惊讶。兆比特和千兆比特的速度从来都不是他们所宣称的那样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12679165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档