Pentru a începe cu ea a fost rãscolitã multe forumuri. Pentru cea mai mare parte au oferit pentru a menține starea în coloana suplimentară. Dar, în copacul meu, peste 400 de mii. Record, iar acest lucru este un consum de memorie suplimentară. Asa ca m-am dus în altă parte.
Analiza problemei a condus la următoarele concluzii:
- aveți nevoie pentru a stoca o listă extinde numai rândurile de pomi;
- În cazul în care linia este redusă la minimum, depozitați-l în lista nu mai este necesară;
- Listă de copac linii instalate stocate pe client, în raport cu întregul copac, este de obicei foarte mică;
- în cazul în care există o linie evidențiată, după actualizarea copac selectați-o din nou;
- pentru că, după actualizarea identificatorii de copac DannyhFormyDerevo schimba, trebuie să-l controleze.
variabilă de tip conformitate a fost introdus pentru partea de client. Se va păstra pentru liniile desfășurate de valorile lor unice (tasta) și ID-urile de rând (valorile). Cel mai important lucru este că nu puteți utiliza tastele ca șiruri de identificatori. Așa cum am scris mai sus, se schimbă sistemul în timp ce actualizarea copac, și este imposibil de a influența.
O formă bazată pe masa de asociat cu DerevomZnacheny, există două evenimente - PeredRazvorachivaniem () și PeredSvorachivaeniem (). Aceste evenimente pus algoritmi adăuga / elimina date extinde linia de copac / colaps.
Când deschideți un copac formular este completat în mod automat în cazul PriSozdaniiNaServere () și este o stare pliată.
Utilizatorul poate actualiza datele, de exemplu, prin apăsarea unui buton. Descriem un copac actualizare software pe partea de client.
Actualizarea Structurii de date ruleaza pe server.
descrie pe scurt ceea ce se întâmplă. Formularul de solicitare ierarhia Nomenclaturii director și de a construi un copac. Pentru a exclude re-adăugarea a arborelui elementelor existente, taie folosind SootvetstvieNomenklaturyIStrokDereva. De asemenea, de-a lungul modul în care ieșim din această corespondență linie copac-mamă pentru noul element.
Odată ce arborele este construit, care formează un tabel cu linii de date utilizate. Această parte este relevantă pentru a reconstrui copac. În cazul în care prima clădire a trecut pentru că noi nu avem noduri dislocate.
Când este creată masa, supraîncărcarea copac sub formă de recuzită DerevoZnacheny. Atunci metoda ObnovitTablitsuIdentifikatorovStrokDerevaNaServere () recuzita iterăm DerevoZnacheny de date (acesta are tipul DannyeFormyDerevo) și caută în intervalul de la masa de lemn TablitsaRazvernutyhStrokDereva. Dacă nu se găsește nici un meci, modificați ID-urile în rânduri TablitsyRazvernutyhStrokDereva. În cazul în care utilizatorul a selectat un rând, suntem, de asemenea, în căutarea pentru o nouă identitate a liniei și-l amintesc. Metoda ObnovitTablitsuIdentifikatorovStrokDerevaNaServere () are o limită, care este activat, dacă ID-urile actualizate ale tuturor liniilor utilizate.
de control revine la ObnovitDerevoZnacheniyNaServere () Procedura următoare,. în cazul în care clientul variabile ID-urile de potrivire copac rând sunt date actualizate în direct. Pe client copac-line se desfășoară conform corespondenței, a lansat o actualizare copac șir este finalizat.
Algoritmul în sine este destul de simplu, în ciuda cantității destul de mare de cod. Puteți să-l utilizați în orice copac. Este suficient pentru a defini o valoare unică pentru fiecare linie de copac.
Codul funcționează prea repede. În special, prin productivitatea medie calculator client web de 400 de mii de copac. Corzi construite pentru aproximativ 2 minute, 40 de secunde rearanjate.