3

在我的应用程序中,我需要大约每 50 毫秒在一个大文件(大约 2-7 GB)中连续写入数据块(大约 2MB)。这是以顺序、循环的方式完成的,所以我将一个又一个块写入文件中,当我在文件末尾时,我会从头开始。

目前我这样做如下:

在 C# 中,我调用File.OpenWrite一次以打开具有读取访问权限的文件并使用SetLength. 当我需要写入一个块时,我将安全文件句柄传递给非托管WriteFile(kernel32.dll)。因此,我传递了一个重叠结构来指定文件中必须写入块的位置。我需要写入的块存储在非托管内存中,所以我有一个IntPtr可以传递给WriteFile.

现在我想知道是否以及如何使这个过程更有效率。有任何想法吗?

一些详细的问题:

  • 从文件 I/O 更改为内存映射文件会有帮助吗?
  • 我可以对 NTFS 进行一些优化吗?
  • 创建我丢失的文件时是否有一些有用的参数?(可能是带有特殊参数的非托管调用)
4

1 回答 1

2

使用更好的硬件可能是提高文件写入效率的最具成本效益的方法。Microsoft 研究中有一篇论文可以回答您的大部分问题:Sequential File Programming Patterns and Performance with .NET和可下载的源代码 (C#),如果您想在您的机器上运行该论文的测试。

简而言之:

  • 默认行为在单个磁盘上提供出色的性能。
  • 如果您有磁盘阵列,则应测试未缓冲的 IO。可以将写入速度提高八倍。

social.msdn上的这个帖子也可能很有趣。

于 2013-07-18T19:15:35.887 回答