我正在开发一个使用listView
的应用程序,我已经为lisyView
中的项目编写了一些make操作函数。我的行为为OnClickCopyAllDomains
和OnClickMarkAllDomains
。这个函数适用于域(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( ... ) { }
}
}
如何让我的功能更好,提高速度?
答案 0 :(得分:2)
在循环前调用listViewDomainsInfo->BeginUpdate()
,然后调用listViewDomainsInfo->EndUpdate()
。
此外,在使用字符串连接时效率极低。使outputClipboard
成为System::Text::StringBuilder而不是System :: String。