.net - 从 CD/DVD 读取速度非常慢,枚举/线程

标签 .net multithreading performance enumeration cd

从 CD/DVD 读取数据时遇到一些问题。从本地 HDD 读取时,我的程序(使用 task.factory/threading)似乎可以正常运行。它基本上旨在枚举一堆图像文件以读取有关这些文件的信息并将其写入文本文件。显然,从 CD 读取将比大多数 HDD 等慢得多,但相比之下它的速度非常慢(慢了 20 倍以上)。

我想知道这是否与线程程序试图读取磁盘驱动器上的数据的方式有关和/或我能做些什么?此外,如果这在某种程度上是一个线索,它似乎并不像从磁盘读取那么慢(但仍然比从磁盘读取慢得多)。是否可以摆弄磁盘的读取方式或读取速度,或者......我什至不知道。我认为不需要我的程序的任何更多细节,但请询问我是否可以提供任何其他信息。

最佳答案

磁盘 IO 不能很好地并行化(可能在 SSD 上除外)-尤其在具有低带宽(与 HDD 相比 - 与 SSD 相比很小)的光驱上更是如此,并且相当大的搜索时间。如果你同时开始寻找多个线程......是的,那会很慢。

尽量避免有多个线程访问磁盘。您可以做的是让一个线程读取数据,然后将工作推送到工作队列中 - 然后等待尽可能多的工作人员从队列中获取工作并处理它。这将最大限度地减少 IO 争用,同时仍然允许并行处理实际工作。

关于.net - 从 CD/DVD 读取速度非常慢,枚举/线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19502387/

相关文章:

c# - 无法删除、下载 blob 并将其上传到 Azure 云存储

c# - 防止应用程序关闭

c# - 为什么我会收到 System.InvalidOperationException?

c# - Entity Framework 是否可用于 Visual Studio 2008 Express Edition?

python - FSharp 运行我的算法比 Python 慢

c++ - DSP性能,应该避免什么?

multithreading - Perl线程缓慢消耗内存

c# - C# 委托(delegate)是线程安全的吗?

java - ExecutorService 在 REST API 中使用

Python IDLE 在打印长字符串后变慢