0

我有一个应用程序,它使用以下方法从文本文件中读取数据:

                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 上填充整个缓冲区吗?即,如果我的缓冲区大于文件大小,则可以/应该将整个文件读入内存。在我看来,操作系统通过允许那么多缓冲区来工作,但不一定要使用它。

4

2 回答 2

1

根据评论,如果文件大小约为2MB,则快速处理解决方案将是

于 2013-05-14T09:10:01.743 回答
0
  1. 尝试以只读模式打开文件
  2. 尝试使用内存映射文件,它可以为并发文件访问提供最佳性能
于 2013-05-14T08:55:37.003 回答