我要每隔1s查询数据库(数据库的量不大2000条记录。我每次取400条)),现在是查询的过程不要消耗多少时间,但是cpu消耗比较大,达到了40%,一直维持在这个比例,问有什么办法将cpu给降下来,大家给个方法,谢谢!
解决方案 »
- 关于CAsyncSocket和CSocket类的问题
- 成功挂接MessageBoxW之后,离屏幕取词还有多远?
- 请问这个是不是vc6的bug.
- UDP如何穿透ISA代理服务器 急急急急急急!!!!
- DCOM访问北拒绝:((((急
- 注册表的问题 高分请教 推荐书
- C Run-Time Error R6025 pure virtual function call 通常是什么问题?(请帮帮忙)
- Simple:关于坐标变换!!
- MFC中如何创建2个同时在界面左边且上下分布的CDialogBar
- 多线程下mscomm串口编程问题
- 用GDI+在VC里绘制Bezier曲线的问题!不知道有没有谁遇到过.
- VC连接错误,高手 Help
CTime tm = CTime::GetCurrentTime();
int nYear = tm.GetYear();
int nMonth = tm.GetMonth();
int nDay = tm.GetDay();
int nHour = tm.GetHour();
int nMinute = tm.GetMinute()+1;
int nSecond = tm.GetSecond();
CTime tmBeg(nYear, nMonth, nDay, nHour,nMinute,nSecond);
CTime tmEnd(nYear, nMonth, nDay, nHour, nMinute, nSecond);
tmEnd -= CTimeSpan(0,0,2,0);
// 查询数据库中2分钟的数据
BOOL bRet = TRUE;
CString strDbField, strTable, strTmBeg, strTmEnd;
GetRtDefName(strTable);
strTable.Replace("#", "#"); strTmBeg = tmBeg.Format("%#Y-%#m-%#d %H:%M");
strTmEnd = tmEnd.Format("%#Y-%#m-%#d %H:%M"); CString strSql;
CTimeSpan tmSpan = tmEnd-tmBeg;
strSql.Format("SELECT * FROM %s WHERE [查询时间] >= \'%s\' AND [查询时间] <= \'%s\' ORDER BY [查询时间]",
strTable, strTmEnd,strTmBeg);
clock_t begin = clock();
try
{
if ( IsOpen() )
Close();
if ( !Open(AFX_DB_USE_DEFAULT_TYPE, strSql))
return ;
}
catch( CDBException *e)
{
CString strMsg(e->m_strError);
strMsg.Replace('\x0a', '!');
AfxMessageBox(strMsg);
e->Delete();
bRet = FALSE;
return ;
}
while(!IsEOF())
{
EVENT event;
GetRtValue(&event);
events.InsertAt(0,event);
MoveNext();
}
而且是同一段代码的执行,cpu一直在摇摆,3%-%14-%6这样的样子,
按道理应是逐步升高啊?为什么?
观察代码,通常select消耗一些CPU资源,循环会消耗一些资源,如果结果集为空,那么循环不会消耗资源,每次循环的次数相同,你才能知道循环对CPU的消耗是怎样的一个程度