wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了windows – 由于额外的读取而在网络上读取文件很慢大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我正在读取一个文件,我要么读取一行数据(1600个连续读取17个字节)或一列数据(1600个读取17个字节,由1600 * 17 = 27,200个字节分隔).该文件位于本地驱动器或远程驱动器上.我做了10次读取,所以我希望在每种情况下读取272,000字节的数据. 在当地的车道上,我看到了我的期望.在按顺序阅读的远程驱动器上,我也看到了我的期望,但在读取列时,我看到正在进行大量的额外读取.它们长
@H_301_2@
我正在读取一个文件,我要么读取一行数据(1600个连续读取17个字节)或一列数据(1600个读取17个字节,由1600 * 17 = 27,200个字节分隔).该文件位于本地驱动器或远程驱动器上.我做了10次读取,所以我希望在每种情况下读取272,000字节的数据.

在当地的车道上,我看到了我的期望.在按顺序阅读的远程驱动器上,我也看到了我的期望,但在读取列时,我看到正在进行大量的额外读取.它们长度为32,768字节,似乎没有使用,但它们使读取的数据量从272,000字节跳到79 MB到106 MB.以下是使用Process Monitor的输出

1:39:39.4624488 PM  DiskSpeedTest.exe   89628   ReadFile    \\BCCDc01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\Basename3D_1\RR_AP succesS Offset: 9,390,069,Length: 17
1:39:39.4624639 PM  DiskSpeedTest.exe   89628   FASTIO_checK_IF_POSSIBLE    \\BCCDc01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\Basename3D_1\RR_AP succesS Operation: Read,Offset: 9,Length: 17
1:39:39.4624838 PM  DiskSpeedTest.exe   89628   ReadFile    \\BCCDc01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\Basename3D_1\RR_AP succesS Offset: 9,388,032,Length: 32,768,I/O Flags: Non-cached,Paging I/O,Synchronous Paging I/O,Priority: Normal
1:39:39.4633839 PM  DiskSpeedTest.exe   89628   ReadFile    \\BCCDc01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\Basename3D_1\RR_AP succesS Offset: 9,417,269,Length: 17
1:39:39.4634002 PM  DiskSpeedTest.exe   89628   FASTIO_checK_IF_POSSIBLE    \\BCCDc01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\Basename3D_1\RR_AP succesS Operation: Read,Length: 17
1:39:39.4634178 PM  DiskSpeedTest.exe   89628   ReadFile    \\BCCDc01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\Basename3D_1\RR_AP succesS Offset: 9,444,469,Length: 17
1:39:39.4634324 PM  DiskSpeedTest.exe   89628   FASTIO_checK_IF_POSSIBLE    \\BCCDc01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\Basename3D_1\RR_AP succesS Operation: Read,Length: 17
1:39:39.4634529 PM  DiskSpeedTest.exe   89628   ReadFile    \\BCCDc01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\Basename3D_1\RR_AP succesS Offset: 9,441,280,Priority: Normal
1:39:39.4642199 PM  DiskSpeedTest.exe   89628   ReadFile    \\BCCDc01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\Basename3D_1\RR_AP succesS Offset: 9,471,669,Length: 17
1:39:39.4642396 PM  DiskSpeedTest.exe   89628   FASTIO_checK_IF_POSSIBLE    \\BCCDc01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\Basename3D_1\RR_AP succesS Operation: Read,Length: 17
1:39:39.4642582 PM  DiskSpeedTest.exe   89628   ReadFile    \\BCCDc01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\Basename3D_1\RR_AP succesS Offset: 9,498,869,Length: 17
1:39:39.4642764 PM  DiskSpeedTest.exe   89628   FASTIO_checK_IF_POSSIBLE    \\BCCDc01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\Basename3D_1\RR_AP succesS Operation: Read,Length: 17
1:39:39.4642922 PM  DiskSpeedTest.exe   89628   ReadFile    \\BCCDc01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\Basename3D_1\RR_AP succesS Offset: 9,624,Priority: Normal

请注意额外读取32,I / O标志设置为非缓存,寻呼I / O,同步寻呼I / O,优先级:正常.这些额外的读取是从272 KB到106 MB,并导致缓慢.从本地文件读取或者我正在读取一行时它们不会发生,因此它们都是顺序的.

我已经尝试过设置FILE_FLAG_RANDOM_ACCESS,但它似乎没有帮助.关于什么导致这些额外读取以及如何使它们停止的任何想法?

测试正在Vista 64位系统上运行.我可以提供程序的源代码来演示问题以及执行测试的控制台程序.

解决方法

您可能会遇到smb上的操作锁定问题.通常,当通过网络读取/保存文件时,窗口会将完整文件拉到客户端上,然后发回更改.使用平面文件数据库文件时,它可能会导致smb文件共享中不必要的读取.

我不确定是否有办法只是拉过整个文件,从本地副本上的该文件中读取行,然后再推回更改.

你会读到一些关于oplocks和平面文件数据库的噩梦.

http://msdn.microsoft.com/en-us/library/aa365433%28VS.85%29.aspx

不确定这是否能解决您的问题,但它可能会让您指向正确的方向.祝好运!

@H_675_49@ @H_301_2@

大佬总结

以上是大佬教程为你收集整理的windows – 由于额外的读取而在网络上读取文件很慢全部内容,希望文章能够帮你解决windows – 由于额外的读取而在网络上读取文件很慢所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。