Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 30226|Atsakyti: 1

[.NET branduolys] Išsamus ".NET Core" objektų telkinio paaiškinimas

[Kopijuoti nuorodą]
Publikuota: 2020-4-15 17:38:34 | | | |
"Microsoft.Extensions.ObjectPool" yra "ASP.NET Core" infrastruktūros dalis, kuri palaiko objektų rinkinio laikymą atmintyje pakartotiniam naudojimui, o ne leidžia rinkti objektus šiukšlėmis.
Jei objektai, kuriuos norite valdyti, yra, gali reikėti naudoti objektų telkinius:

  • Paskirstymas / inicijavimas yra brangus.
  • Atstovauja tam tikrus ribotus išteklius.
  • Naudokite nuspėjamai ir dažnai.


Pakartotinis naudojimas yra svarbi tema ir neišvengiama problema, su kuria dažnai susiduriame kasdieniame tobulėjime.

Paprasčiausias ir žinomiausias pavyzdys: duomenų bazių ryšių telkiniai yra pakartotinai naudojami duomenų bazių ryšiai.

Taigi, kokia yra pakartotinio naudojimo prasmė?

Paprasčiau tariant, tai sumažina nereikalingus išteklių nuostolius.

Be duomenų bazių ryšių, gali būti daug kitų objektų, kuriuos reikia pakartotinai naudoti pagal skirtingus scenarijus ar reikalavimus, ir yra vadinamasis objektų telkinys.

Panašias funkcijas turėjote įdiegti patys, naudodami "ConcurrentBag", "ConcurrentQueue" ar kitus sprendimus.

Tai taip pat dalijasi įgyvendinimu "Microsoft" dokumentacijoje

Kaip: Objektų telkinio kūrimas naudojant ConcurrentBag

Hipersaito prisijungimas matomas.

Žinoma, ".NET Core" sistemoje "Microsoft" padėjo mums įdiegti paprastą objektų telkinį.

Pirmiausia sukurkite naują .NET Core konsolės projektą ir naudokite komandą nuget, kad pridėtumėte šį paketą:

Visas kodas yra toks:

Naudojimas 1



Prieš kurdami fondą, turime apibrėžti politiką. Čia mes tiesiogiai naudojame įtrauktą DefaultPooledObjectPolicy, kad jį sukurtume.

Objektų telkinyje bus išlaikytas maksimalus gijų skaičius.

Naudokite telkinio objekto metodą Get, kad pašalintumėte objektą iš objektų telkinio.

Aukščiau pateiktas kodas paleidžia rezultatą

#1-464d2e03-604d-4451-b68a-8a3a2abdfccc-itsvse.com-1/1/0001 12:00:00
#2-70122aa0-a949-4c63-b878-321efe64c234-itsvse.com-1/1/0001 12:00:00
#3-de717815-796a-4349-a571-047acc125104-itsvse.com-1/1/0001 12:00:00
#4-3a404341-a560-47f7-a3b0-0d477a8ae17f-itsvse.com-1/1/0001 12:00:00 AM
#5-51c96126-d424-4b58-b07c-6408e6c4cea6-itsvse.com-1/1/0001 12:00:00
#6-7ea4d596-fd2a-43b3-959a-9e48da58a758-itsvse.com-1/1/0001 12:00:00
#7-6874c64b-532d-4f92-a4fb-ff472da574a1-itsvse.com-1/1/0001 12:00:00
#8-ca767674-2c07-4f26-975f-4711a31d795d-itsvse.com-1/1/0001 12:00:00
#9-a9cd1859-a919-46a0-ae5d-85b6d3d11ccb-itsvse.com-1/1/0001 12:00:00 AM
#10-fe89ed8b-4dfd-4eef-b876-b2a60ee50958-itsvse.com-1/1/0001 12:00:00
Šis rezultatas rodo, kad objektų telkinio objektai yra tiesiogiai nauji, o kai kurios savybės nėra nuvertintos, o tai šiuo metu dažnai neturi didelės praktinės reikšmės.

Kadangi DefaultPooledObjectPolicy yra naujas objektas tiesiogiai, daug kartų, to nesitikime!

Jei norite patenkinti mūsų faktinį naudojimą, turite patys nustatyti politiką!

Pažvelkime į 2 naudojimą

2 naudojimas

Metodas Sukurti naudojamas demonstraciniam objektui sukurti, o grąžinimo metodas yra grąžinti demonstracinį objektą atgal į objektų telkinį (pasiskolintą ir grąžintą).



Objektų telkinys čia apibrėžtas taip, kad jame būtų tik vienas objektas.

Kadangi išėmus jį iš objektų telkinio atliekama vieno veiksmo grąžinimo operacija, item1 ir item2 turėtų būti tas pats objektas.

Išėmus item2 iš objektų telkinio, jis negrąžinamas, todėl objektų telkinys sukurs naują objektą pagal mūsų apibrėžtą strategiją.

Štai 2 naudojimo rezultatas:

985b3232-0a45-4115-8480-ad3d42c0ae10-itsvse.com-4/15/2020 3:31:15 AM
985b3232-0a45-4115-8480-ad3d42c0ae10-itsvse.com-4/15/2020 3:31:15 AM
True
8912424a-15c5-4891-b625-25b17eee5c8b-itsvse.com-4/15/2020 3:31:15 AM
False
Galite pamatyti, kad atskiros item1, item2 ir item3 savybės yra vienodos, o item1 ir item2 iš tikrųjų yra tas pats objektas. 3 ir 1 punktai nėra tas pats dalykas.


3 naudojimas

Matote, kad item1 ir item2 yra tas pats objektas. Atsiimant objektą iš objektų telkinio, bus paimtas pirmasis, todėl jei jį grąžinsite ir vėl atgausite, vis tiek gausite originalą.



item3 yra paimtas tiesiai iš objektų telkinio ir nėra sukuriamas iš naujo, nes objektų baseinas čia palaiko kelis objektus, o ne tik vieną 2 naudojime, todėl jis paimamas tiesiai iš telkinio.

Štai išvesties rezultatas

f3cd5467-536b-4ffe-9c71-de53027b4869-itsvse.com-4/15/2020 3:33:58 AM
f3cd5467-536b-4ffe-9c71-de53027b4869-itsvse.com-4/15/2020 3:33:58 AM
True
b933b593-af6d-4ebe-b21b-e8784d124764-itsvse.com-4/15/2020 3:33:58 AM
False
Kaip ir 2 vartojimas, esmė yra ta pati.

4 naudojimas

Atrodo, kad aukščiau pateiktas vartojimas nėra toks panašus į mūsų įprastą vartojimą. Mes vis dar turime pasikliauti injekcijomis.

Taigi pagaliau pažvelkime, kaip derinti priklausomybės injekciją. Žinoma, esmė čia vis dar neatsiejama nuo dviejų dalykų Politika ir Teikėjas.



Pirmiausia turime užregistruoti teikėją, o tada tiesiogiai paimti jo egzempliorių, kad sukurtume objektų telkinį.

Jei norite jį naudoti kitur, galite jį įšvirkšti per konstruktorių.

Rezultatas čia taip pat toks pat kaip ir anksčiau, nėra daug ką pasakyti.

suvestinė

Bet nesvarbu, koks jis naudojamas, turime suprasti, kad Objektų telkinys yra neatsiejamas nuo trijų vaikinų Pool, Policy ir Provider.

Su šiais trimis galbūt galime daryti ką norime.

Žinoma, jame taip pat yra keletas specialių dalykų, kuriuos galite patikrinti, jei jus domina.

LeakTrackingObjectPool

StringBuilderPooledObjectPolicy





Ankstesnis:Įvadas į žiniatinklio tarnybų patobulinimus (WSE) 3.0
Kitą:Kaip "Visual Studio 2013" randa turinį, kuris pakeičia kelias eilutes?
 Savininkas| Paskelbta 2023-8-30 18:34:07 |
DefaultObjectPool naudojamas pagrindiniame lygyjeConcurrentQueueGijos saugos eilės įgyvendinimas, šaltinio kodas yra toks:


Hipersaito prisijungimas matomas.


Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com