CListCtrlの使用を慎む::SetItemData()
CListCtrlの使用を慎む::SetItemData()
事例のダウンロード
最近、MFCのCListCtrlを使っているとき、奇妙な現象に遭遇しました.ListCtrlにitemを挿入すると、各itemがデータを指すポインタをバインドできることを望んでいます.この要求を実現するには多くの方法がある.その中の2種類を使いました.
1つ目の方法:
この方法では、バインドするデータポインタをlParamパラメータに配置します.
2つ目の方法:
私はまずこのitemを挿入してから、このデータポインタをバインドします.
挿入するitemの数が非常に多い場合,この2つの方法の効率は千差万別である.方法1の効率は方法2より非常に高い.私が添付した例では、10000個のitemを挿入しました.結果方法1は300 ms程度,方法2は33000 ms付近を用いた.効率が100倍も悪いなんて!わかりにくい!
もしかしてSetItemData()に時間がかかりすぎたのでしょうか?知っている友達がいたら教えてください.また私はCTreeCtrlをテストしていませんが、同じではないでしょうか.
事例のダウンロード
最近、MFCのCListCtrlを使っているとき、奇妙な現象に遭遇しました.ListCtrlにitemを挿入すると、各itemがデータを指すポインタをバインドできることを望んでいます.この要求を実現するには多くの方法がある.その中の2種類を使いました.
1つ目の方法:
int InsertItem(UINT nMask, int nItem, LPCTSTR lpszItem, UINT nState,
UINT nStateMask, int nImage, LPARAM lParam);
この方法では、バインドするデータポインタをlParamパラメータに配置します.
2つ目の方法:
int InsertItem(int nItem, LPCTSTR lpszItem);
BOOL SetItemData(int nItem, DWORD dwData);
私はまずこのitemを挿入してから、このデータポインタをバインドします.
挿入するitemの数が非常に多い場合,この2つの方法の効率は千差万別である.方法1の効率は方法2より非常に高い.私が添付した例では、10000個のitemを挿入しました.結果方法1は300 ms程度,方法2は33000 ms付近を用いた.効率が100倍も悪いなんて!わかりにくい!
もしかしてSetItemData()に時間がかかりすぎたのでしょうか?知っている友達がいたら教えてください.また私はCTreeCtrlをテストしていませんが、同じではないでしょうか.