【问题标题】:Read a large amount of data from network file fails in virtual machine虚拟机从网络文件读取大量数据失败
【发布时间】:2014-02-13 05:50:21
【问题描述】:

我想通过 VMWare ESX 读取 Windows Server 2003 VM 中的网络文件。这个简单的代码失败了(在 Visual Studio 2010 中)

hFile = CreateFileA("\\MyServer\myfile",

                   GENERIC_READ,          // open for writing
                   FILE_SHARE_READ,       // do not share
                   NULL,                   // default security
                   OPEN_EXISTING,             // create new file only
                   FILE_ATTRIBUTE_NORMAL,  // normal file
                   NULL);                  // no attr. template

如果 (hFile == INVALID_HANDLE_VALUE) 返回;

char * buffer = (char*)malloc(bufferSize);

如果(缓冲区== NULL)返回;

if( FALSE == ReadFile(hFile, buffer, bufferSize, &dwBytesToRead, NULL) )

{

  printf("Terminal failure: Unable to read from file, code is %d.\n", GetLastError());
  CloseHandle(hFile);
  return;

}

当 bufferSize 大于 40,000,000 时,ReadFile 失败,GetLastError 返回 1450,表示“系统资源不足,无法完成请求的服务。”

一些附加信息:

1) 此代码在物理机上运行

2) 我的虚拟机有 4 核和 16 GB 内存,我在 8G 和 24G 之间更改页面文件大小,没有效果,仍然失败。

3) \\MyServer\myfile 实际上是在运行代码的本地机器中。但是,如果我将文件更改为 d:\myfile(与 \\MyServer\myfile 相同的文件),则 ReadFile 成功

4) 代码在 bufferSize 小于 30,000,000 时有效

看起来 VMWare ESC 对 Windows 设置了一些限制。有人可以给我有关如何调试/修复它的建议吗? (没有更低的bufferSize)

非常感谢!

【问题讨论】:

    标签: windows visual-studio-2010 vmware


    【解决方案1】:

    首先尝试使用理想的缓冲区大小,然后如果出现错误 1450,请减小缓冲区大小并重试。

    非常大的缓冲区大小不会提高性能,尤其是在网络上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2014-01-02
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多