提高使用listView项目的函数的速度

时间:2011-06-17 20:26:23

标签: listview c++-cli

背景

我正在开发一个使用listView的应用程序,我已经为lisyView中的项目编写了一些make操作函数。我的行为为OnClickCopyAllDomainsOnClickMarkAllDomains。这个函数适用于域(listView项),当listView包含超过100.000项时,我觉得工作速度下降了。所以下面我将向您展示功能,我希望您提前 如何提高功能的速度?

OnClickMarkAllDomains

此功能将listView项设置状态设置为 true

System::Void MainForm::OnClickMarkAllDomains(System::Object^  sender, System::EventArgs^  e) {
        for( int i=0; i<listViewDomainsInfo->Items->Count; ++i )
            listViewDomainsInfo->Items[i]->Checked = true;
    }

OnClickCopyAllDomains

在此功能中,我将listView个项目(域)复制到剪贴板,如果域数超过100.000,我等待5分钟,直到行动结束。

System::Void MainForm::OnClickCopyAllDomains(System::Object^  sender, System::EventArgs^  e) {
        int itemsCount                  = listViewDomainsInfo->Items->Count;
        System::String^ outputClipboard = System::String::Empty;

        for( int i=0; i<itemsCount; ++i ) {
            outputClipboard += listViewDomainsInfo->Items[i]->Text + "\r\n";
        }

        if( !System::String::IsNullOrEmpty( outputClipboard ) ) {
            try {
                System::Windows::Forms::Clipboard::SetText( outputClipboard );
            }
            catch( ... ) { }
        }
    }

问题

如何让我的功能更好,提高速度?

1 个答案:

答案 0 :(得分:2)

在循环前调用listViewDomainsInfo->BeginUpdate(),然后调用listViewDomainsInfo->EndUpdate()

此外,在使用字符串连接时效率极低。使outputClipboard成为System::Text::StringBuilder而不是System :: String。