我有一些非常大的二进制文件(每个> 1TB)具有高度压缩的数据.我经常从这些文件中读取一些大约300字节的数据块.为此,我将文件一次打开7个线程并执行读取操作.
磁盘集群大小如何与此对应.当我读取300字节并且磁盘簇大小设置为64KB时,.net会读取整个64KB而不是300字节吗?
在这种情况下,小型或大型集群的大小是否更好?我使用FileStream,FileOptions设置为FileOptions.RandomAccess.
如果要在运行时优化从任何给定分区读取的缓冲区大小,可以更进一步,在运行时获取簇大小,并为读缓冲区使用多个.
但是,您需要从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