【发布时间】:2011-04-01 10:19:13
【问题描述】:
我有一个需要多次读取的 xml 文件。我正在尝试使用 Parallel.ForEach 来加快这个过程,因为读入的数据都与读入的顺序无关。数据只是用于填充对象。我的问题是即使我每次都在线程中以只读方式打开文件,但它抱怨它已被另一个程序打开。 (我没有在文本编辑器或任何东西中打开它:))
如何从同一个文件中完成多次读取?
编辑:该文件大约 18KB 非常小。它被阅读了大约 1,800 次。
谢谢
【问题讨论】:
-
您的硬盘仍然只有一个磁头,因此您一次只能读取一次。您期望从中获得哪些性能改进?
-
文件是否适合磁盘缓存?如果是这样,那么多次读取将很快,否则如果文件足够小以适合内存,则使用内存映射文件代替并从中读取。否则,硬盘将花费大量时间抖动而不是执行顺序读取,并且您将失去性能而不是获得它。
-
硬盘上的一个头?我敢肯定,如今即使是单个盘片驱动器也有多个磁头以及缓存等,可以解决磁头特定的减速问题。
-
@GrayWizardx:错过重点的方法:)
-
@Timwi 猜我做到了。哪一点?我提供了一个替代解决方案来解决多次读取问题。严格指定 FileShare.Read 会修复错误但不会解决问题。
标签: c# xml file foreach parallel-processing