磁盘集群/块大小如何与二进制文件读取相关?

Chr*_*ris 3 .net c# file

我有一些非常大的二进制文件(每个> 1TB)具有高度压缩的数据.我经常从这些文件中读取一些大约300字节的数据块.为此,我将文件一次打开7个线程并执行读取操作.

磁盘集群大小如何与此对应.当我读取300字节并且磁盘簇大小设置为64KB时,.net会读取整个64KB而不是300字节吗?

在这种情况下,小型或大型集群的大小是否更好?我使用FileStream,FileOptions设置为FileOptions.RandomAccess.

dod*_*ron 5

如果要在运行时优化从任何给定分区读取的缓冲区大小,可以更进一步,在运行时获取簇大小,并为读缓冲区使用多个.

但是,您需要从kernel32.dll进行PInvoke才能执行此操作.

使用GetDiskFreeSpace函数获取给定分区的簇大小.

这是方法签名:

[DllImport("kernel32.dll", SetLastError=true, CharSet=CharSet.Auto)]
   static extern bool GetDiskFreeSpace(string lpRootPathName, 
   out uint lpSectorsPerCluster, 
   out uint lpBytesPerSector, 
   out uint lpNumberOfFreeClusters, 
   out uint lpTotalNumberOfClusters);
Run Code Online (Sandbox Code Playgroud)

将路径传递给您感兴趣的驱动器的根目录.要获得每个群集的字节数,请将lpSectorsPerCluster乘以lpBytesPerSector.

有关更多信息,请访问此函数的pinvoke.com页面:http://www.pinvoke.net/default.aspx/kernel32.GetDiskFreeSpace