Debug和Release下程序性能的“巨大”差异问题
情况是这样的:
Release下,右键菜单弹出一个对话框修改信息。发现需要等待1秒多对话框才出来,有明显的停顿。于是切换到Debug下,嘿,竟然很快,是那种正常的速度,一点也没有迟缓。
到对话框的OnInitDialog函数下(这里有比较多的数据初始化),开头是初始化组合框(CComboBox)_resetCombo(),于是进入_resetCombo(),加了简单的时间测试(已经注释掉的)。代码大致如下:
就是这个函数,发现Release下执行时间大概1200ms,而在Debug下只有100ms的样子。那应该就是这个函数的问题。
那我想是不是组合框的内容太多了(其中成员变量 m_nMaxGADCount 在此时是2000)?
于是单独写了一个对话框测试程序,在OnInitDialog里给组合框添加1万条信息(同样,也全是数字编号的),不管Release还是Debug下,都是很快很正常的速度。
于是,我纳闷了。。。
Release下,右键菜单弹出一个对话框修改信息。发现需要等待1秒多对话框才出来,有明显的停顿。于是切换到Debug下,嘿,竟然很快,是那种正常的速度,一点也没有迟缓。
到对话框的OnInitDialog函数下(这里有比较多的数据初始化),开头是初始化组合框(CComboBox)_resetCombo(),于是进入_resetCombo(),加了简单的时间测试(已经注释掉的)。代码大致如下:
void CGADDialog::_resetComboBox()
{
// DWORD dwStartTime = GetTickCount();
m_comBox.ResetContent();
CString cstrText;
for(int i = 0; i < m_nMaxGADCount; i++)
{
cstrText.Format(_T("%d"), i);
m_comBox.AddString(strText);
}
m_comBox.LimitText(4);
m_comBox.SetCurSel(0);
// DWORD dwEndTime = GetTickCount();
// cstrText.Format(_T("m_nMaxGADCount = %d, %dms"), m_nMaxGADCount, dwEndTime - dwStartTime);
// AfxMessageBox(cstrText);
}就是这个函数,发现Release下执行时间大概1200ms,而在Debug下只有100ms的样子。那应该就是这个函数的问题。
那我想是不是组合框的内容太多了(其中成员变量 m_nMaxGADCount 在此时是2000)?
于是单独写了一个对话框测试程序,在OnInitDialog里给组合框添加1万条信息(同样,也全是数字编号的),不管Release还是Debug下,都是很快很正常的速度。
于是,我纳闷了。。。
...全文
相关推荐
为什么debug编译不出错,而release编译会出错
该文档介绍了有的工程在debug中编译没有错误,可是在release下编译却报错的原因和解决方案,希望有助于大家学习。
“Debug正常,Release崩溃”的可能原因
1.内存分配问题 2.ASSERT和VERIFY 3.参数问题 4.DLL的灾难 5.RELEASE板中的调试 6.编译器的优化可能导致许多意想不到的错误
Debug和release的详细区别
VC++里面debug版本和release版本的区别,初学者了解
release模式正常debug模式下报错.docx
很多时候在写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步定位到问题所在处,才发现原来是给定的一个数组未初始化,导致后面处理异常。我们先来看看
CCS中Debug与Release的区别
CCS中Debug与Release的区别.doc


