gpt4 book ai didi

c++ - 相同数量的记录执行 CListCtrl::InsertItem 的时间不同

转载 作者:搜寻专家 更新时间:2023-10-31 02:24:30 25 4
gpt4 key购买 nike

我有一个包含 10000 条记录的 CListCtrl,当程序启动时它会被填满,这个操作的时间约为 1.3 秒。但如果用户刷新列表,它会在 ~2.5 - 3 秒内填满。

在这两种情况下工作的是同一段代码:

SetRedraw(FALSE);
SetItemCount(nCount);

// insert

SetRedraw(TRUE);

变量 nCount 在程序启动时等于 0,在用户刷新列表时等于 10000。

为什么填表的时间相差这么大?

UPD:最少的代码

void CTestList::Init()
{
InsertColumn(0, _T("Number"), 0, 50);
InsertColumn(1, _T("Obj name"), 0, 150);
InsertColumn(2, _T("Creator"), 0, 100);
InsertColumn(3, _T("Editor"), 0, 100);
}

void CTestList::Reset()
{
LVITEM item;

item.iItem = 0;
for (int i = 0; i < 10000; i++)
{
InsertRow(item, i);
item.iItem++;
}
}

void CTestList::InsertRow(LVITEM& item, int num)
{
CString strNum;

//
item.iSubItem = 0;
item.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
item.lParam = NULL;
item.iImage = 0;

strNum.Format(_T("%d"), num);
item.pszText = (LPTSTR)(LPCTSTR)strNum;
InsertItem(&item);

//
item.mask = LVIF_TEXT;
item.iSubItem = 1;
item.pszText = _T("Test object");
SetItem(&item);

//
item.mask = LVIF_TEXT;
item.iSubItem = 2;
item.pszText = _T("Any one");
SetItem(&item);

//
item.iSubItem = 3;
item.pszText = _T("Another one");
SetItem(&item);
}

void CApp::FillList()
{
CWaitCursor wait;

m_list.DeleteAllItems();

clock_t begin = clock();
m_list.SetRedraw(FALSE);
m_list.SetItemCount(nCount);
m_list.Reset();
m_list.SetRedraw(TRUE);
clock_t end = clock();

double dif = static_cast<double>(end - begin) / CLOCKS_PER_SEC;

CString str;

str.Format(_T("Insertion time: %f"), dif);
AfxMessageBox(str);
}

最佳答案

我已经在我的机器上测试了你的代码。只有当我在调试器中运行程序(使用 F5)时,我才能重现不同的时序,但如果我在没有调试器的情况下运行它(使用 Ctrl+F5 )。所以这似乎与您的代码或 Windows API 没有直接关系,而是与调试器有关。

关于c++ - 相同数量的记录执行 CListCtrl::InsertItem 的时间不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27984399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com