gpt4 book ai didi

c# - HDD 高效连续数据写入

转载 作者:行者123 更新时间:2023-11-30 17:04:29 36 4
gpt4 key购买 nike

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

目前我是这样做的:

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

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

一些详细的问题:

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

最佳答案

使用更好的硬件可能是提高文件写入效率的最具成本效益的方法。Microsoft Research 的一篇论文将回答您的大部分问题:Sequential File Programming Patterns and Performance with .NETdownloadable source code (C#)如果你想在你的机器上运行论文中的测试。

简而言之:

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

此线程在 social.msdn 上可能也有兴趣。

关于c# - HDD 高效连续数据写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17445782/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com