"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
|