我用MFC封装的WinInet类来访问一个站点获取信息,在读取数据的时候CPU奔到了100%占用率,而且文件大小为20~30KB的也需要7、8秒钟,效率非常低下~这是怎么回事呢?初次使用WinInet,很多不明白的,以下是我的实现代码:// http connection
CHttpConnection *pHttpConnection=NULL;
// http file pointer
CHttpFile *pHttpFile=NULL;
// server url and object.
CString szServerUrl, szObject;
CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded");
// extract server and objects
szServerUrl = url;
ExtractObject(szServerUrl,szObject); try 
{
pHttpConnection=GetHttpConnection(szServerUrl,0,dwPort); if( NULL == pHttpConnection)
{
// no exception raised but there is an error. 
return WEB_ACCESS_UNEXPECTED_ERROR;
}
}
catch (CInternetException *pException)
{
char buffer[1023];
pException->GetErrorMessage(buffer, 1023);
resultString = buffer;
return pException->m_dwError;
} // open request
try 
{
pHttpFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, szObject); if(NULL == pHttpFile)
{
Clear(pHttpConnection,pHttpFile);
return WEB_ACCESS_UNEXPECTED_ERROR;
}
}
catch(CInternetException *pException)
{
char buffer[1023];
pException->GetErrorMessage(buffer, 1023);
resultString = buffer; Clear(pHttpConnection,pHttpFile);
return pException->m_dwError;
    } // send the request
try 
{ BOOL ret = pHttpFile->SendRequest(strHeaders, (LPVOID)(LPCSTR)szFormData, szFormData.GetLength()); if( FALSE == ret )
{
Clear(pHttpConnection,pHttpFile);
return WEB_ACCESS_UNEXPECTED_ERROR;
}
}
catch(CInternetException *pException)
{
char buffer[1023];
pException->GetErrorMessage(buffer, 1023);
resultString = buffer; Clear(pHttpConnection,pHttpFile);
return pException->m_dwError;
} // query status code
DWORD retCode;
BOOL ret = pHttpFile->QueryInfoStatusCode(retCode);
if( FALSE == ret )
{
Clear(pHttpConnection,pHttpFile);
return WEB_ACCESS_QUERY_INFO_ERROR;
}
else if( HTTP_STATUS_OK != retCode )
{
Clear(pHttpConnection,pHttpFile);
return retCode;
} char buf[2];
int bytesRead;
resultString = "";

while( (bytesRead = pHttpFile->Read(buf, 1)) > 0 )
{
resultString += buf[0];
} Clear(pHttpConnection,pHttpFile);
return WEB_ACCESS_DONE;
调用的时候是:CWebAccess webAccess;CString result;
webAccess.Post(m_wndEditURL, m_wndEditData, 8080,result);
请知道的朋友说明下

解决方案 »

  1.   

    CPU可以放到线程中处理来降低...
    下载效率,可能需要自己下载来解析..
      

  2.   

    可以用socket来对比一下,
    WinInet就是你这么使用步骤了
      

  3.   

    只要有代码在运行,CPU总是会上去的;而下载时间和网络有关系,最好用其他方法对比才能说明问题。
      

  4.   

    感觉CPU100%不一定是这个地方的问题, 我以前调用这个类实现爬虫程序,单线程速度及效果都不错啊。不知道楼主机器配置及网络情况怎样啊。
      

  5.   

    放到线程中运行, 你在主线程中运行, CPU会给你的主线程最大的资源利用率..
      

  6.   

    骇! 我缓冲区太小,而有和CString的实例进行运算,导致构造析构频繁~~~揭帖!