Увеличение скорости работы функций с элементами listView. - PullRequest
0 голосов
/ 18 июня 2011

Фон

Я работаю над приложением, которое использует listView, и я написал некоторые функции для выполнения действий с элементами в lisyView.У меня есть действия как 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 элементов (доменов) в буфер обмена. I, если количество доменов превышает 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 Ответ

2 голосов
/ 18 июня 2011

Вызов listViewDomainsInfo->BeginUpdate() перед вашими циклами и listViewDomainsInfo->EndUpdate() после.

Кроме того, конкатенация строк при ее использовании крайне неэффективна.Сделать outputClipboard a System :: Text :: StringBuilder вместо System :: String.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...