C# 在一次访问硬盘时读取几个txt文件

C# 在一次访问硬盘时读取几个txt文件,c#,C#,在整个论坛中找不到这个问题的答案。 有没有一种方法可以读取例如5个txt文件而不是一个? 我希望访问磁盘的次数减少。不,这是不可能的。如果您想减少磁盘IO,可以使用一个文件,并通过它来访问不同的区域。看看这篇SO文章:只需阅读这五个文件。程序发出的I/O与磁盘上发生的事情之间存在某种直接因果关系的日子早已一去不复返了。缓存(是的,复数)、命令队列、预测性抓取和其他策略都意味着,为了提高性能,您能做的最好的事情就是告诉操作系统您想要什么,并让它找出实现这一点的最佳方法 (不,无论如何,你不可能精确

在整个论坛中找不到这个问题的答案。 有没有一种方法可以读取例如5个txt文件而不是一个?
我希望访问磁盘的次数减少。

不,这是不可能的。如果您想减少磁盘IO,可以使用一个文件,并通过它来访问不同的区域。看看这篇SO文章:

只需阅读这五个文件。程序发出的I/O与磁盘上发生的事情之间存在某种直接因果关系的日子早已一去不复返了。缓存(是的,复数)、命令队列、预测性抓取和其他策略都意味着,为了提高性能,您能做的最好的事情就是告诉操作系统您想要什么,并让它找出实现这一点的最佳方法


(不,无论如何,你不可能精确地做你想做的事)

不可能。。。一个接一个地读文件。。。在这种情况下,不要让你的生活复杂化,因为你会想到表演


祝您好运…

根据您对文件的操作,您可以使用5行代码来读取所有行

或者您打开一个streamreader并在for循环中进行读取,这样您就可以在同一行上读取它们。 这不会是“立刻”,但非常接近

最后一个选项是真正使用多线程,您可以异步读取所有文件,并在不同线程上逐个启动读取过程

但是请记住,如果从同一个存储器读取数据,那么这样做不会给您带来任何额外的性能!
只有在其他存储器上读取,可能是在使用RAID的存储器上读取,并且如果您读取的文件足够大,有足够的读取时间来获得性能提升,您才能获得性能提升。

由于垃圾收集的开销,从文本文件读取字符串时,光盘访问很可能不是您最关心的问题。 看

如果您想最大限度地利用光盘的读取请求,您应该更加注重重用缓冲区和避免字符串。此外,您还可以并行发出读取请求,希望raid控制器读取的磁盘队列得到优化,以便将不同文件的随机读取转换为大的顺序读取(例如,本机命令队列就是这样一种功能)。要实现此优化,您需要将足够的并行读取请求排队(但不要太多),以最大限度地利用raid控制器

实际上,如果您读取一个文件一次或多次,这非常重要,因为大多数情况下,所有后续读取都是从文件系统缓存中传递的,这基本上是一个CopyMemory操作

如果您想要更快,您应该查看MemoryMapped文件,其中文件系统缓存的实际内容映射到您的进程空间中,这样您就可以从内核模式缓冲区到用户模式缓冲区执行一次内存复制操作


第一条规则应该是在优化之前进行测量。否则,您将在根本不成问题的地方花费大量时间和精力。

谢谢,虽然没有办法做到这一点,但我想确定:)如果您使用C#4或更高版本,为了提高速度,为什么不使用并行类来同时读取文件?