从虚拟机中读取网络文件中的大量数据失败

时间:2014-01-22 22:26:56

标签: windows visual-studio-2010 vmware

我想通过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

if(hFile == INVALID_HANDLE_VALUE)return;

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

if(buffer == NULL)return;

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)我的VM有4个内核和16 GB内存,我将页面文件大小更改为8G到24G,没有效果,仍然失败。

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

4)当bufferSize小于30,000,000

时,代码有效

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

非常感谢!

1 个答案:

答案 0 :(得分:0)

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

极大的缓冲区大小无法帮助提高性能,尤其是在网络上。