Article View: alt.pl.comp.lang.csharp
Article #10052Re: Zachowanie stanu w TreeView
From: Jaroslaw Kowalski
Date: Sat, 19 Nov 2005 16:21
Date: Sat, 19 Nov 2005 16:21
38 lines
3100 bytes
3100 bytes
"NoCode" <nocode@no-email.com> wrote in message news:dlmvnh$afq$1@inews.gazeta.pl... > Piszac "realne doswiadczenie" mialem na mysli "realne doswiadczenie w > zadanym tu problemie" - jasniej -> poszukiwalem kogos kto w swojej > aplikacji zachowuje stan kontrolki TreeView i potrafi wydajnie go > odtwarzac. Przysłuchując się tej dyskusji postanowiłem sam wykonać "realne doświadczenie". Napisałem programik, który zachowuje stan drzewka w hashtable i potrafi następnie odtworzyć jego stan: http://blog.jkowalski.net/Drzewa.zip Wynik: 18000 węzłów (pliki i katalogi z c:\windows - mają rozmach skur....) Czas: (wliczając odczytanie tych wszystkich plików i katalogów z dysku) poniżej jednej sekundy na laptopie Centrino 1.6 GHz, 1GB pamięci. Czyli jak dla mnie - szybko. (Oczywiście cache dyskowy musi być "gorący", bo za pierwszym razem odczytanie tych katalogów i plików trwa ponad minutę) Kluczowa jest funkcja "FillTree" w tym pliku - tworzy ona (pod)drzewo dla zadanego katalogu i jako hint dostaje hashtable, w którym przechowywane są FullPath'y do rozwiniętych węzłów. Jeśli w tym hashtable jest węzeł, który właśnie jest tworzony to wołam na nim Expand(). Tyle. Nie mam jak sprawdzić tego na jakiejś drzewiastej bazie danych szybszej niż system plików, ale podejrzewam że gorzej nie będzie. Kluczowe dla wydajności jest to, aby minimalizować odrysowywanie ekranu. Czyli lepiej tworzyć TreeNode'y i podpiąć je do ZWINIĘTEGO roota a dopiero na końcu go rozwinąć. W przeciwnym przypadku dodawanie węzłów będzie powodować ich wyświetlanie, co może powodować odrysowywanie kontrolki, co z kolei zabije wydajność. -- Jarek http://blog.jkowalski.net/
Technical Details
Message-ID:
<dlnj7l$2tpq$1@node1.news.atman.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.atman.pl!not-for-mailReferences:
<dlf3ot$gkm$1@inews.gazeta.pl> <dlf5vq$ahk$1@nemesis.news.tpi.pl> <dlg7sm$mf5$1@inews.gazeta.pl> <dlgcmv$4tr$1@atlantis.news.tpi.pl> <dlgfp1$eqo$1@nemesis.news.tpi.pl> <dlggsr$459$1@inews.gazeta.pl> <dlj5n4$94h$1@atlantis.news.tpi.pl> <dljssh$t6i$1@inews.gazeta.pl> <dlk5l7$3ki$1@nemesis.news.tpi.pl> <dlk867$d99$1@inews.gazeta.pl> <dlke7h$4em$1@news.onet.pl> <dlkg3m$nge$1@inews.gazeta.pl> <dllk9q$ag1$1@atlantis.news.tpi.pl> <dlmvnh$afq$1@inews.gazeta.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.atman.pl!not-for-mail From: "Jaroslaw Kowalski" <jaak@wyrzucto.jkowalski.net> Newsgroups: alt.pl.comp.lang.csharp Subject: Re: Zachowanie stanu w TreeView Date: Sat, 19 Nov 2005 17:21:32 +0100 Organization: ATMAN Lines: 40 Message-ID: <dlnj7l$2tpq$1@node1.news.atman.pl> References: <dlf3ot$gkm$1@inews.gazeta.pl> <dlf5vq$ahk$1@nemesis.news.tpi.pl> <dlg7sm$mf5$1@inews.gazeta.pl> <dlgcmv$4tr$1@atlantis.news.tpi.pl> <dlgfp1$eqo$1@nemesis.news.tpi.pl> <dlggsr$459$1@inews.gazeta.pl> <dlj5n4$94h$1@atlantis.news.tpi.pl> <dljssh$t6i$1@inews.gazeta.pl> <dlk5l7$3ki$1@nemesis.news.tpi.pl> <dlk867$d99$1@inews.gazeta.pl> <dlke7h$4em$1@news.onet.pl> <dlkg3m$nge$1@inews.gazeta.pl> <dllk9q$ag1$1@atlantis.news.tpi.pl> <dlmvnh$afq$1@inews.gazeta.pl> NNTP-Posting-Host: chello084010088174.chello.pl X-Trace: node1.news.atman.pl 1132417077 96058 84.10.88.174 (19 Nov 2005 16:17:57 GMT) X-Complaints-To: abuse@atman.pl NNTP-Posting-Date: Sat, 19 Nov 2005 16:17:57 +0000 (UTC) X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.2670 X-MIMEOLE: Produced By Microsoft MimeOLE V6.00.2900.2670 X-RFC2646: Format=Flowed; Response MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit