Mam SysListView32
, który powinien potencjalnie obsługiwać miliony wierszy i trzy kolumny tekstu A, B, C, każdy po < 256 znaków.1-milionowy wiersz ListView
Załóżmy, że kolumna B ma wiele powtórzeń (przykład: kolumna A to nazwa pliku, kolumna B to ścieżka, a każdy wiersz jest plikiem systemu plików) i ma tylko 100k różnych wartości (zamiast kilku milionów).
Czy można uniknąć duplikowania w pamięci RAM zawartości kolumny B elementu GUI ListView
?
możemy wypełnić ListView
tylko wskaźników do tablic elementów (wzięte z 100k-element tablicy różnych wartości kolumna B), zamiast danych duplikatów?
Jak to zmienić, aby działało?
LV_ITEM item;
item.mask = LVIF_TEXT;
item.pszText = "Hello";
...
ListView_SetItem(hList, &item);
[Wirtualna Lista-View Style] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb774735.aspx #Virtual_ListView_Style) i [Jak korzystać z kontroli widoku wirtualnej listy] (https://msdn.microsoft.com/en-us/library/windows/desktop/hh270411.aspx). – IInspectable
@IInspectable Wygląda naprawdę interesująco, przeczytałem go kilka razy, ale prawdopodobnie potrzebuję 10 dodatkowych odczytów, aby w pełni go uzyskać. Może myślisz, że moglibyśmy znaleźć pełny projekt zabawkowy MSVC++, który to demonstruje, z prawdziwym, konkretnym listView wypełnionym wierszami? – Basj
Naprawdę niewiele. Tworzysz widok listy używając stylu 'LVS_OWNERDATA', przechowujesz wskaźnik na surowych danych w' LVITEM.lParam' i obsługujesz komunikat 'LVN_GETDISPINFO'. – IInspectable