Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 15843|Răspunde: 0

[Sursă] Analiza metodelor statice și a modelelor singleton

[Copiază linkul]
Postat pe 10.10.2019 18:15:05 | | |
Adesea avem o astfel de confuzie în programare, unele funcții sunt rezolvate folosind singleton-uri, iar altele prin metode statice, deci care sunt principiile și scenariile de utilizare ale metodelor statice și singleton-urilor? Să clarificăm această chestiune astăzi.

1. Să vedem mai întâi diferența dintre metodele statice și cele nestatice?

        Mulți programatori au această înțelegere că metodele statice se încarcă prima, metodele nestatice se încarcă mai târziu, metodele statice vor exista întotdeauna în memorie, iar metodele nestatice nu. Prin urmare, se recomandă utilizarea unei metode nestatice. În primul rând, este greșit să subliniem că această înțelegere este greșită.

        În primul rând, să analizăm din memorie: atunci când aplicația este inițializată, CLR (CLR este Common Language Runtime) este și un mediu de execuție asemănător mașinii virtuale Java, care este responsabil pentru gestionarea resurselor (alocarea memoriei și colectarea gunoiului etc.) și asigură separarea necesară între aplicație și sistemul de operare de bază. CLR are două denumiri diferite de traducere: Common Language Runtime și Common Language Runtime. Alocă un spațiu de adrese fiecărui proces din spațiul disponibil al procesului, care este heap-ul gestionat. Heap-ul gestionat este împărțit în mai multe regiuni, cele mai importante fiind grămada de colectare a gunoiului (GC Heap) și heap-ul loader (Loader Heap), care este folosit pentru stocarea instanțelor obiectelor și este gestionat de GC. Cele mai importante informații pe care Loader Heap le stochează prin tabelul MethodTable sunt informațiile legate de metadate, cum ar fi tipurile de bază, câmpurile statice, interfețele de implementare și toate metodele. Loader Heap nu acceptă controlul GC, iar ciclul său de viață este de la creare până la distrugere. Cu alte cuvinte, odată ce o clasă este încărcată, atât metodele statice, cât și cele nestatice ale acestei clase sunt stocate în tabelul MethodTab al Load Heap, fără control GC, și toate sunt rezidente în memorie pentru prima încărcare.

        Care este diferența dintre o metodă statică și una nestatică? Diferența este că atunci când creezi un obiect, metoda statică are doar o copie, în timp ce metoda nestatică va copia o copie a informațiilor despre această instanță pe GC Heap pentru fiecare obiect nou și, în același timp, va pune noul obiect pe stivă. Adresa indicată de pointerul stivei este adresa de memorie care tocmai a fost copiată în GC Heap. Prin urmare, în ceea ce privește viteza de apelare a metodelor, metodele statice sunt mai rapide deoarece metodele nestatice trebuie instanțiate și alocate memorie.

Din perspectiva istoriei programării, aproape toate metodele timpurii de programare structurată erau statice, iar introducerea metodelor de instanțiere a fost o chestiune de programare orientată pe obiecte, astfel încât metoda de instanțiere nu a fost menită să rezolve problema eficienței de rulare și a memoriei. Este pentru a face dezvoltarea mai modelată și orientată spre obiecte.

        Din analiza de mai sus se poate trage o concluzie: 1. Metoda statică și metoda nestatică fac distincția dintre modul soluție. 2. Dacă moștenirea, polimorfismul sau dacă o metodă nu are legătură cu obiectul clasei sale, ar trebui să alegi o metodă statică, cum ar fi o clasă de unelte.        

2. Care este diferența dintre modul singleton și metoda statică?

        Uneori trebuie să menținem o informație în inginerie, cum ar fi unele atribute de configurație încărcate la rulare, care trebuie să existe pe tot parcursul vieții aplicației și să fie publice, astfel încât este nevoie de o singură copie. În acest moment, vom lua în considerare utilizarea unei metode singleton sau statice pentru a menține aceste date, dar în acest moment, aceste date sunt obținute într-un mod orientat pe obiecte, vom folosi un singleton.

        În primul rând, metodele statice sunt bazate pe clase, iar singleton-urile sunt bazate pe obiecte. Dacă modelul de rezoluție este bazat pe obiecte, se folosește un singleton, altfel se folosește o abordare statică. De exemplu, trebuie să moștenești clase, să implementezi interfețe, să întârzii inițializarea, să rescrii clasele părinte etc. pentru a folosi singletoni, în al doilea rând, metodele statice sunt orientate pe proces, iar singletonele sunt orientate pe obiect. În al treilea rând, variabilele statice de atribut nu vor fi eliminate de GC, deci obiectele singletone nu vor fi eliminate de GC, iar obiectele generate în metode statice vor fi eliberate când metoda statică este executată.




Precedent:Practica middleware-ului de mesagerie distribuită (de Ni Wei) PDF complet în chineză
Următor:Problema de oprire și pornire automată a laptopului Dell Latitude 5501 rezolvată
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com