2014-01-22 48 views
1

我想通過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)回報;

字符*緩衝液= (字符*)malloc的(BUFFERSIZE);

如果(緩衝== NULL)回報;

如果(FALSE == ReadFile的(HFILE,緩衝劑,緩衝區大小,& dwBytesToRead, NULL))

{

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

}

當緩衝區大小大於4000萬時,ReadFile的失敗,並且GetLastError返回1450的意思是「沒有足夠的系統資源存在,無法完成請求的服務。 「

一些額外的信息:

1)該代碼在一臺物理機器

2)我的VM具有4個內核和16 GB內存和I改變8G和24G之間的頁面文件大小不效果,仍然失敗

3)\\ MyServer \ myfile實際上是在運行代碼的本地機器上,但是如果我將文件更改爲d:\ myfile(與\\ MyServer \ myfile相同的文件) ,那麼ReadFile成功

4)代碼在b ufferSize小於30,000,000

它看起來像VMWare ESC在Windows上放一些限制。有人可以給我建議如何調試/修復它嗎? (沒有更低的緩衝區大小)

非常感謝!

回答

0

先嚐試使用理想的緩衝區大小,然後如果出現錯誤1450,請減小緩衝區大小並重試。

極大的緩衝區大小不會幫助性能,尤其是在網絡上。