在我的应用程序中,我需要大约每 50 毫秒在一个大文件(大约 2-7 GB)中连续写入数据块(大约 2MB)。这是以顺序、循环的方式完成的,所以我将一个又一个块写入文件中,当我在文件末尾时,我会从头开始。
目前我这样做如下:
在 C# 中,我调用File.OpenWrite
一次以打开具有读取访问权限的文件并使用SetLength
. 当我需要写入一个块时,我将安全文件句柄传递给非托管WriteFile
(kernel32.dll)。因此,我传递了一个重叠结构来指定文件中必须写入块的位置。我需要写入的块存储在非托管内存中,所以我有一个IntPtr
可以传递给WriteFile
.
现在我想知道是否以及如何使这个过程更有效率。有任何想法吗?
一些详细的问题:
- 从文件 I/O 更改为内存映射文件会有帮助吗?
- 我可以对 NTFS 进行一些优化吗?
- 创建我丢失的文件时是否有一些有用的参数?(可能是带有特殊参数的非托管调用)