加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 由于额外的读取而在网络上读取文件很慢

发布时间:2020-12-14 02:25:16 所属栏目:Windows 来源:网络整理
导读:我正在读取一个文件,我要么读取一行数据(1600个连续读取17个字节)或一列数据(1600个读取17个字节,由1600 * 17 = 27,200个字节分隔).该文件位于本地驱动器或远程驱动器上.我做了10次读取,所以我希望在每种情况下读取272,000字节的数据. 在当地的车道上,我看到
我正在读取一个文件,我要么读取一行数据(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    BCCDC01BCC-raid3SeisWareInc Temp DirBPepers_TempProjectsPT_4HorizonsBaseName3D_1RR_AP SUCCESS Offset: 9,390,069,Length: 17
1:39:39.4624639 PM  DiskSpeedTest.exe   89628   FASTIO_CHECK_IF_POSSIBLE    BCCDC01BCC-raid3SeisWareInc Temp DirBPepers_TempProjectsPT_4HorizonsBaseName3D_1RR_AP SUCCESS Operation: Read,Offset: 9,Length: 17
1:39:39.4624838 PM  DiskSpeedTest.exe   89628   ReadFile    BCCDC01BCC-raid3SeisWareInc Temp DirBPepers_TempProjectsPT_4HorizonsBaseName3D_1RR_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    BCCDC01BCC-raid3SeisWareInc Temp DirBPepers_TempProjectsPT_4HorizonsBaseName3D_1RR_AP SUCCESS Offset: 9,417,269,Length: 17
1:39:39.4634002 PM  DiskSpeedTest.exe   89628   FASTIO_CHECK_IF_POSSIBLE    BCCDC01BCC-raid3SeisWareInc Temp DirBPepers_TempProjectsPT_4HorizonsBaseName3D_1RR_AP SUCCESS Operation: Read,Length: 17
1:39:39.4634178 PM  DiskSpeedTest.exe   89628   ReadFile    BCCDC01BCC-raid3SeisWareInc Temp DirBPepers_TempProjectsPT_4HorizonsBaseName3D_1RR_AP SUCCESS Offset: 9,444,469,Length: 17
1:39:39.4634324 PM  DiskSpeedTest.exe   89628   FASTIO_CHECK_IF_POSSIBLE    BCCDC01BCC-raid3SeisWareInc Temp DirBPepers_TempProjectsPT_4HorizonsBaseName3D_1RR_AP SUCCESS Operation: Read,Length: 17
1:39:39.4634529 PM  DiskSpeedTest.exe   89628   ReadFile    BCCDC01BCC-raid3SeisWareInc Temp DirBPepers_TempProjectsPT_4HorizonsBaseName3D_1RR_AP SUCCESS Offset: 9,441,280,Priority: Normal
1:39:39.4642199 PM  DiskSpeedTest.exe   89628   ReadFile    BCCDC01BCC-raid3SeisWareInc Temp DirBPepers_TempProjectsPT_4HorizonsBaseName3D_1RR_AP SUCCESS Offset: 9,471,669,Length: 17
1:39:39.4642396 PM  DiskSpeedTest.exe   89628   FASTIO_CHECK_IF_POSSIBLE    BCCDC01BCC-raid3SeisWareInc Temp DirBPepers_TempProjectsPT_4HorizonsBaseName3D_1RR_AP SUCCESS Operation: Read,Length: 17
1:39:39.4642582 PM  DiskSpeedTest.exe   89628   ReadFile    BCCDC01BCC-raid3SeisWareInc Temp DirBPepers_TempProjectsPT_4HorizonsBaseName3D_1RR_AP SUCCESS Offset: 9,498,869,Length: 17
1:39:39.4642764 PM  DiskSpeedTest.exe   89628   FASTIO_CHECK_IF_POSSIBLE    BCCDC01BCC-raid3SeisWareInc Temp DirBPepers_TempProjectsPT_4HorizonsBaseName3D_1RR_AP SUCCESS Operation: Read,Length: 17
1:39:39.4642922 PM  DiskSpeedTest.exe   89628   ReadFile    BCCDC01BCC-raid3SeisWareInc Temp DirBPepers_TempProjectsPT_4HorizonsBaseName3D_1RR_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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读