🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alt.pl.comp.lang.csharp
Article #10052

Re: Zachowanie stanu w TreeView

#10052
From: Jaroslaw Kowalski
Date: Sat, 19 Nov 2005 16:21
38 lines
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-mail
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>

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