我有一个应用程序,可以使用Flex前端和.NET web服务将项目及其文件从预览移动到生产环境。目前,每个项目大约需要5-10分钟的时间。除了延迟问题,它真的不应该花那么长时间。我想知道这是否是多线程的好用例。此外,考虑到用户可能想要推送多个项目或一个接一个项目,是否有一种方法来对作业进行排队。
任何建议和例子都是非常感谢的。
谢谢!
发布于 2009-12-05 02:50:54
执行繁重磁盘IO的东西通常不是多线程的好候选者,因为磁盘一次只能做一件事。但是,如果您正在推送多个服务器,或者服务器有特别好的磁盘子系统,那么一些轻线程可能是有益的。
发布于 2009-12-05 02:56:26
需要注意的是,无论您是否决定将作业排队,您都将使用多线程。排队只是使用多线程处理最终解决问题的一种方式。
是的,我建议你建立一个队列来推出每个项目。
发布于 2009-12-05 04:46:41
你应该将你的代码的速度与仅仅在Windows中复制(即,资源管理器或命令行)与使用诸如TeraCopy之类的高级工具进行复制进行比较。如果您代码比Window慢得多,那么可以使用探查器查看代码中的各个部分以进行优化。如果你的代码和Windows一样快,但是比TeraCopy慢,那么多线程可能会有所帮助。
当操作I/O受限时,多线程通常没有帮助,但复制文件涉及到从磁盘读取和通过网络写入。这是两个I/O操作,所以如果将它们分别放在不同的线程上,可以提高性能。对于这种情况,您需要一个生产者/消费者设置,其中您有一个Circular queue,其中一个线程从磁盘读取并写入队列,另一个线程从队列读取并写入网络。重要的是要记住,这两个线程不会以相同的速度运行,所以如果队列变满了,请在写入更多数据之前等待,如果队列为空,则在写入之前等待。此外,锁定策略可能会对这里的性能产生很大影响,并可能导致性能降级到比单线程实现更慢的速度。
https://stackoverflow.com/questions/1848920
复制相似问题