Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 30226|Odgovoriti: 1

[.NET Core] Podrobna razlaga objektnega bazena v .NET Core

[Kopiraj povezavo]
Objavljeno 15. 4. 2020 ob 17:38:34 | | | |
Microsoft.Extensions.ObjectPool je del infrastrukture ASP.NET Core, ki podpira shranjevanje nabora objektov v pomnilniku za ponovno uporabo namesto dovoljevanja zbiranja smeti objektov.
Če so objekti, ki jih želite upravljati, morda uporabiti objektne bazene:

  • Dodeljevanje/inicializacija je draga.
  • Predstavlja omejen vir.
  • Uporabljajte predvidljivo in pogosto.


Ponovna uporaba je pomembna tema in neizogiben problem, s katerim se pogosto srečujemo v našem vsakdanjem razvoju.

Če vzamemo najpreprostejši in najbolj znan primer, so povezovalni bazeni podatkovnih baz ponovno uporabljene povezave z bazo podatkov.

Torej, kakšen je smisel ponovne uporabe?

Preprosto povedano, zmanjšuje nepotrebno izgubo virov.

Poleg povezav z bazo podatkov je lahko še veliko drugih objektov, ki jih je treba ponovno uporabiti v različnih scenarijih ali zahtevah, poleg tega pa obstaja tako imenovani objektni bazen.

Podobne funkcije bi morali implementirati sami, bodisi s ConcurrentBag, ConcurrentQueue ali z drugimi rešitvami.

To si prav tako deli implementacijo v Microsoftovi dokumentaciji

Kako: Ustvariti objektni bazen z uporabo ConcurrentBag

Prijava do hiperpovezave je vidna.

Seveda nam je Microsoft v .NET Core pomagal implementirati preprost Object Pool.

Najprej ustvarite nov .NET Core konzolni projekt in uporabite ukaz nuget za dodajanje naslednjega paketa:

Vsa koda je naslednja:

Uporaba 1



Preden ustvarimo bazen, moramo definirati politiko. Tukaj neposredno uporabljamo priloženi DefaultPooledObjectPolicy za njegovo sestavo.

Objektni bazen bo imel vzdrževano največje število niti.

Uporabite metodo Get objekta bazena, da objekt odstranite iz objektnega bazena.

Zgornja koda izvede rezultat

#1-464d2e03-604d-4451-b68a-8a3a2abdfccc-itsvse.com-1/1/0001 00:00:00
#2-70122aa0-a949-4c63-b878-321efe64c234-itsvse.com-1/1/0001 00:00:00
#3-de717815-796a-4349-a571-047acc125104-itsvse.com-1/1/0001 00:00
#4-3a404341-a560-47f7-a3b0-0d477a8ae17f-itsvse.com-1/1/0001 00:00
#5-51c96126-d424-4b58-b07c-6408e6c4cea6-itsvse.com-1/1/0001 00:00
#6-7ea4d596-fd2a-43b3-959a-9e48da58a758-itsvse.com-1/1/0001 00:00
#7-6874c64b-532d-4f92-a4fb-ff472da574a1-itsvse.com-1/1/0001 00:00:00
#8-ca767674-2c07-4f26-975f-4711a31d795d-itsvse.com-1/1/0001 00:00
#9-a9cd1859-a919-46a0-ae5d-85b6d3d11ccb-itsvse.com-1/1/0001 00:00
#10-fe89ed8b-4dfd-4eef-b876-b2a60ee50958-itsvse.com-1/1/0001 00:00
Ta rezultat kaže, da so objekti v Object Poolu neposredno novi in da nekatere lastnosti niso devalvirane, kar trenutno pogosto nima velikega praktičnega pomena.

Ker je DefaultPooledObjectPolicy pogosto nov objekt, to ni tisto, kar pričakujemo!

Če želite izpolniti našo dejansko uporabo, morate sami določiti politiko!

Poglejmo si uporabo 2

Uporaba 2

Metoda Create se uporablja za ustvarjanje Demo objekta, metoda Return pa je tako, da se Demo objekt vrne nazaj v Object Pool (izposojen in vrnjen).



Objektni bazen je tukaj definiran tako, da vsebuje le en objekt.

Ker obstaja enostopenjska operacija vrnitve po odstranitvi iz objektnega bazena, bi morala biti predmet1 in predmet2 isti objekt.

Po odstranitvi elementa 2 iz bazena objektov ta ni vrnjen, zato bo bazen objektov ustvaril nov objekt na podlagi politike, ki smo jo določili.

Tukaj je izhodni rezultat uporabe 2:

985b3232-0a45-4115-8480-ad3d42c0ae10-itsvse.com-15. 4. 2020 3:31:15
985b3232-0a45-4115-8480-ad3d42c0ae10-itsvse.com-15. 4. 2020 3:31:15
True
8912424a-15c5-4891-b625-25b17eee5c8b-itsvse.com-15. 4. 2020 3:31:15
False
Vidite lahko, da so posamezne lastnosti elementa1, predmeta2 in predmeta3 enake, ter da sta predmet1 in predmet2 res isti objekt. Točka3 in točka1 nista isto.


Uporaba 3

Vidite, da sta predmet1 in predmet2 isti objekt. Ko pridobivate predmet iz Object Poola, se vzame prvi, tako da če ga vrnete in ponovno pridobite, boste še vedno dobili original.



element3 je vzet neposredno iz Object Poola tam in se ne ustvari več, ker Object Pool tukaj vzdržuje več objektov, ne le enega v uporabi 2, zato je vzet neposredno iz Poola.

Tukaj je izhodni rezultat

f3cd5467-536b-4ffe-9c71-de53027b4869-itsvse.com-15. 4. 2020 3:33:58
f3cd5467-536b-4ffe-9c71-de53027b4869-itsvse.com-15. 4. 2020 3:33:58
True
b933b593-af6d-4ebe-b21b-e8784d124764-itsvse.com-15. 4. 2020 3:33:58
False
Enako kot pri uporabi 2, bistvo je enako.

Uporaba 4

Zdi se, da zgornja uporaba ni tako podobna naši običajni uporabi. Še vedno se moramo zanašati na injekcije.

Torej si na koncu poglejmo, kako združiti injekcijo odvisnosti. Seveda je bistvo tukaj še vedno neločljivo povezano z dvema stvarma – politiko in ponudnikom.



Najprej moramo registrirati ponudnika, nato pa neposredno vzeti njegovo instanco za ustvarjanje objektnega bazena.

Če ga želiš uporabiti drugje, ga lahko vbrizgaš skozi konstruktor.

Rezultat je tudi enak kot prej, ni veliko za povedati.

Povzetek

A ne glede na to, kakšno uporabo gre, moramo razumeti, da je Object Pool neločljivo povezan s tremi člani: Pool, Policy in Provider.

S temi tremi morda lahko počnemo, kar hočemo.

Seveda ponuja tudi več posebnih stvari, ki jih lahko preverite, če vas zanima.

LeakTrackingObjectPool

StringBuilderPooledObjectPolicy





Prejšnji:Uvod v izboljšave spletnih storitev (WSE) 3.0
Naslednji:Kako Visual Studio 2013 najde vsebino, ki nadomešča več vrstic?
 Najemodajalec| Objavljeno 30. 8. 2023 ob 18:34:07 |
DefaultObjectPool se uporablja na osnovni ravniConcurrentQueueImplementacija varnostne vrste niti je izvorna koda naslednja:


Prijava do hiperpovezave je vidna.


Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com