我有一个应用程序,它使用以下方法从文本文件中读取数据:
CRD.reader = new StreamReader(fn,Encoding.UTF8,true,1024);
CRD.readLine();
但是我在我的 24 核机器上并行运行了 16 个该应用程序的实例。当我这样做时,所花费的总时间比单独运行一个实例所花费的时间要长得多(即使它们是并行运行的)。我认为这是因为磁盘争用?
我看到了使用缓冲流的建议,但我不明白这与上面的代码有何不同。当然可以通过指定缓冲区大小 - 我已经在使用“缓冲”流了吗?
对于我的代码,我尝试了各种不同大小的缓冲区 - 但似乎没有太大区别。
EDIT 1
如果有人可以解释缓冲流与我正在做的事情有何不同-那将非常有帮助
EDIT 2
如果我设置一个大缓冲区
CRD.reader = new StreamReader(fn,Encoding.UTF8,true,65536);
CRD.readLine();
我可以强制在第一个 readLine 上填充整个缓冲区吗?即,如果我的缓冲区大于文件大小,则可以/应该将整个文件读入内存。在我看来,操作系统通过允许那么多缓冲区来工作,但不一定要使用它。