HDD上有效的连续数据写入

时间:2013-07-03 10:36:49

标签: c# c file-io memory-mapped-files

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

目前我正在按如下方式进行:

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

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

一些问题详细说明:

  • 是否会从文件I / O更改为内存映射文件?
  • 我可以为NTFS包含一些优化吗?
  • 在创建我缺少的文件时是否有一些有用的参数? (可能是带有特殊参数的非托管呼叫)

1 个答案:

答案 0 :(得分:2)

使用更好的硬件可能是提高文件写入效率的最具成本效益的方法。 微软研究中的一篇论文将回答您的大多数问题:Sequential File Programming Patterns and Performance with .NETdownloadable source code (C#),如果您想从机器上的纸张中运行测试。

简而言之:

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

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