Описание
Я пишу приложение, что использовать listView
. listView
, который я использую - это простое представление списка, только я включаю doubleBufer
, наследуя listView
, и в конструкторе я пишу:
this->DoubleBuffer = true;
Итак, у меня есть несколько столбцов в моем listView
, и когда я щелкаю по столбцу, мне нужно отсортировать элементы столбца. Все идет хорошо, когда у меня есть 500 элементов, но когда количество элементов в listView
становится больше 50.000, и я нажимаю на столбец, чтобы отсортировать элементы в нем, мой список замораживается на 1 минуту и реакция приложения останавливается. Ниже я представляю код сортировки.
Код сортировки
ref class DomainSorter : public System::Collections::IComparer {
public:
virtual int Compare( System::Object^ x, System::Object^ y) {
System::Windows::Forms::ListViewItem^ lvi1 = static_cast<System::Windows::Forms::ListViewItem^>(o1);
System::String^ str1 = lvi1->SubItems[COLUMN_DOMAIN]->Text;
System::Windows::Forms::ListViewItem^ lvi2 = static_cast<System::Windows::Forms::ListViewItem^>(o2);
System::String^ str2 = lvi2->SubItems[COLUMN_DOMAIN]->Text;
int result = 0;
if( lvi1->ListView->Sorting == System::Windows::Forms::SortOrder::Ascending)
result = System::String::Compare( str1, str2 );
else result = System::String::Compare( str2, str1 );
return result;
}
};
void OnColumnClick( )
{
listViewDomainsInfo->BeginUpdate( );
listViewDomainsInfo->ListViewItemSorter = gcnew DomainSorter( );
if (listViewDomainsInfo->Sorting == SortOrder::Ascending)
listViewDomainsInfo->Sorting = SortOrder::Descending;
else listViewDomainsInfo->Sorting = SortOrder::Ascending;
listViewDomainsInfo->EndUpdate( );
}
Вопрос
Как я могу увеличить скорость сортировки listView
. (Я знал, что могу использовать виртуальный список, но не хотел) Можете ли вы помочь мне сделать этот код быстрее?