Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 30226|Svare: 1

[.NET Core] Detaljert forklaring av Object Pool i .NET Core

[Kopier lenke]
Publisert 15.04.2020 kl. 17:38:34 | | | |
Microsoft.Extensions.ObjectPool er en del av ASP.NET Core-infrastrukturen som støtter å holde et sett objekter i minnet for gjenbruk i stedet for å tillate søppelinnsamling av objekter.
Hvis objektene du vil administrere er det, kan det hende du må bruke objektpooler:

  • Allokering/initialisering er kostbart.
  • Representerer en begrenset ressurs.
  • Bruk det forutsigbart og ofte.


Gjenbruk er et viktig tema og et uunngåelig problem vi ofte møter i vår daglige utvikling.

For å ta det enkleste og mest kjente eksempelet, er databasetilkoblingspooler gjenbrukte databaseforbindelser.

Så hva er poenget med gjenbruk?

Enkelt sagt reduserer det unødvendig ressurstap.

I tillegg til databasetilkoblinger kan det være mange andre objekter som må gjenbrukes under ulike scenarioer eller krav, og det finnes en såkalt objektpool.

Du burde ha implementert lignende funksjoner selv, enten med ConcurrentBag, ConcurrentQueue eller med andre løsninger.

Dette deler også en implementering i Microsoft-dokumentasjonen

Hvordan: Opprette en objektpool ved å bruke en ConcurrentBag

Innloggingen med hyperkoblingen er synlig.

Selvfølgelig har Microsoft hjulpet oss med å implementere en enkel objektpool i .NET Core.

Først, lag et nytt .NET Core-konsollprosjekt og bruk nuget-kommandoen for å legge til følgende pakke:

All kode er som følger:

Bruk 1



Før vi oppretter en pool, må vi definere en policy. Her bruker vi direkte den medfølgende DefaultPooledObjectPolicy for å konstruere den.

Objektpoolen vil ha et maksimalt antall tråder som opprettholdes.

Bruk Get-metoden til pool-objektet for å ta et objekt ut av objekt-poolen.

Koden ovenfor kjører resultatet

#1-464d2e03-604d-4451-b68a-8a3a2abdfccc-itsvse.com-1/1/0001 00:00:00 AM
#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:00 AM
#4-3a404341-a560-47f7-a3b0-0d477a8ae17f-itsvse.com-1/1/0001 00:00:00
#5-51c96126-d424-4b58-b07c-6408e6c4cea6-itsvse.com-1/1/0001 00:00:00
#6-7ea4d596-fd2a-43b3-959a-9e48da58a758-itsvse.com-1/1/0001 00:00:00 AM
#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:00 AM
#9-a9cd1859-a919-46a0-ae5d-85b6d3d11ccb-itsvse.com-1/1/0001 00:00:00
#10-fe89ed8b-4dfd-4eef-b876-b2a60ee50958-itsvse.com-1/1/0001 00:00:00
Dette resultatet viser at objektene i objektpoolen er direkte nye, og noen egenskaper er ikke devaluert, noe som ofte ikke har mye praktisk betydning på nåværende tidspunkt.

Fordi DefaultPooledObjectPolicy er et nytt objekt direkte, er dette ofte ikke det vi forventer!

Hvis du vil møte vår faktiske bruk, må du selv definere en forsikring!

La oss se på bruk 2

Bruk 2

Create-metoden brukes til å lage Demo-objektet, og Return-metoden er å kaste Demo-objektet tilbake i Object Pool (lånt og returnert).



Objektpoolen er her definert til å inneholde kun ett objekt.

Siden det er en ettstegs returoperasjon etter å ha tatt den ut av objektpoolen, skal element1 og item2 være det samme objektet.

Etter å ha tatt element2 ut av objektpoolen, returneres den ikke, så objektpoolen vil opprette et nytt objekt basert på policyen vi definerte.

Her er utgangsresultatet av bruk 2:

985b3232-0a45-4115-8480-ad3d42c0ae10-itsvse.com-15.04.2020 03:31:15
985b3232-0a45-4115-8480-ad3d42c0ae10-itsvse.com-15.04.2020 03:31:15
True
8912424a-15c5-4891-b625-25b17eee5c8b-itsvse.com-15.04.2020 03:31:15
False
Du kan se at de individuelle egenskapene til element1, item2 og item3 er de samme, og item1 og item2 faktisk er det samme objektet. Element3 og item1 er ikke det samme.


Bruk 3

Du kan se at element1 og item2 er det samme objektet. Når du henter et objekt fra objektpoolen, blir det første tatt, så hvis du returnerer det og henter det igjen, får du fortsatt originalen først.



item3 tas direkte fra objektpoolen der og opprettes ikke igjen, fordi objektpoolen her vedlikeholder flere objekter, ikke bare ett i bruk 2, så det tas direkte fra poolen.

Her er utgangsresultatet

f3cd5467-536b-4ffe-9c71-de53027b4869-itsvse.com-15.04.2020 03:33:58
f3cd5467-536b-4ffe-9c71-de53027b4869-itsvse.com-15.04.2020 03:33:58
True
b933b593-af6d-4ebe-b21b-e8784d124764-itsvse.com-15.04.2020 03:33:58
False
Samme som i bruk 2, essensen er den samme.

Bruk 4

Det virker som om bruken ovenfor ikke er så lik vår vanlige bruk. Vi må fortsatt stole på injeksjon.

Så la oss endelig se på hvordan man kan kombinere avhengighetsinjeksjon. Selvfølgelig er essensen her fortsatt uatskillelig fra de to tingene Polise og Leverandør.



Vi må først registrere Provideren, og deretter ta instansen direkte for å opprette en Object Pool.

Hvis du vil bruke det et annet sted, kan du injisere det gjennom konstruktøren.

Resultatet her er også det samme som før, det er ikke så mye å si.

sammendrag

Men uansett hvilken type bruk det er, må vi forstå at Object Pool er uatskillelig fra de tre aktørene Pool, Policy og Provider.

Med disse tre kan vi kanskje gjøre hva vi vil.

Selvfølgelig tilbyr den også flere spesielle ting som du kan sjekke ut hvis du er interessert.

LeakTrackingObjectPool

StringBuilderPooledObjectPolicy





Foregående:Introduksjon til webtjenesteforbedringer (WSE) 3.0
Neste:Hvordan finner Visual Studio 2013 innhold som erstatter flere linjer?
 Vert| Publisert 30.08.2023 18:34:07 |
DefaultObjectPool brukes på underliggende nivåConcurrentQueueNår det gjelder trådsikkerhetskø-implementering, er kildekoden som følger:


Innloggingen med hyperkoblingen er synlig.


Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com