Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 30226|Vastaus: 1

[.NET Core] Yksityiskohtainen selitys Object Poolista .NET Coressa

[Kopioi linkki]
Julkaistu 2020-4-15 klo 17:38:34 | | | |
Microsoft.Extensions.ObjectPool on osa ASP.NET Core -infrastruktuuria, joka tukee objektien säilyttämistä muistissa uudelleenkäyttöä varten sen sijaan, että sallittaisiin objektien roskien kerääminen.
Jos haluamasi objektit ovat, saatat tarvita objektipoolia:

  • Kohdentaminen/alustus on kallista.
  • Edustaa rajallista resurssia.
  • Käytä ennustettavasti ja usein.


Uudelleenkäyttö on tärkeä aihe ja väistämätön ongelma, johon usein törmäämme päivittäisessä kehityksessämme.

Yksinkertaisin ja tutuin esimerkki on, että tietokantayhteysaltaat ovat uudelleenkäytettyjä tietokantayhteyksiä.

Mikä siis on uudelleenkäytön tarkoitus?

Yksinkertaisesti sanottuna se vähentää tarpeetonta resurssien menetystä.

Tietokantayhteyksien lisäksi voi olla monia muita objekteja, joita täytyy käyttää uudelleen eri tilanteissa tai vaatimuksissa, ja on olemassa ns. Object Pool.

Sinun olisi pitänyt toteuttaa vastaavat toiminnot itse, joko ConcurrentBagilla, ConcurrentQueuella tai muilla ratkaisuilla.

Tämä jakaa myös Microsoftin dokumentaation toteutuksen.

Miten: Luoda objektipooli käyttämällä ConcurrentBagia

Hyperlinkin kirjautuminen on näkyvissä.

Tietenkin .NET Coressa Microsoft on auttanut meitä toteuttamaan yksinkertaisen Object Poolin.

Luo ensin uusi .NET Core -konsoliprojekti ja käytä nuget-komentoa seuraavan paketin lisäämiseen:

Kaikki koodit ovat seuraavat:

Käyttö 1



Ennen poolin luomista meidän täytyy määritellä politiikka. Tässä käytämme suoraan mukana olevaa DefaultPooledObjectPolicyä sen rakentamiseen.

Objektipoolilla on maksimimäärä säikeitä yllätettynä.

Käytä pool-objektin Get-metodia ottaaksesi objektin pois objektipoolista.

Yllä oleva koodi suorittaa tuloksen

#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:00
#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
#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
#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
Tämä tulos osoittaa, että Object Poolin objektit uusitaan suoraan, eikä joidenkin ominaisuuksien arvo ole alennettu, mikä ei usein tällä hetkellä ole kovin käytännöllistä merkitystä.

Koska DefaultPooledObjectPolicy on uusi olio suoraan, monesti tämä ei ole sitä, mitä odotamme!

Jos haluat täyttää todellisen käyttömme, sinun täytyy määritellä vakuutus itse!

Katsotaanpa käyttöä 2

Käyttö 2

Create-menetelmää käytetään Demo-objektin luomiseen, ja Return-menetelmänä Demo-olio heitetään takaisin Object Pooliin (lainattuna ja palautetunaan).



Objektipooli määritellään tässä sisältämään vain yhden objektin.

Koska objektipoolista poistettuna on yhden vaiheen palautusoperaatio, kohde 1 ja alkio 2 ovat sama objekti.

Kun kohde 2 otetaan pois objektipoolista, sitä ei palauteta, joten objektipooli luo uuden objektin määrittelemän politiikan perusteella.

Tässä on käytön 2 tulos:

985b3232-0a45-4115-8480-ad3d42c0ae10-itsvse.com-15.4.2020 klo 3:31:15
985b3232-0a45-4115-8480-ad3d42c0ae10-itsvse.com-15.4.2020 klo 3:31:15
True
8912424a-15c5-4891-b625-25b17eee5c8b-itsvse.com-15.4.2020 klo 3:31:15
False
Näet, että yksittäisten elementtien 1, alkion 2 ja alkion 3 ominaisuudet ovat samat, ja kohteet 1 ja 2 ovat todellakin sama objekti. Item3 ja item1 eivät ole sama asia.


Käyttö 3

Näet, että kohde 1 ja esine 2 ovat sama objekti. Kun haet esineen Object Poolista, ensimmäinen otetaan mukaan, joten jos palautat sen ja haet sen uudelleen, saat silti alkuperäisen ensimmäisenä.



item3 otetaan suoraan Object Poolista eikä sitä luoda uudelleen, koska Object Pool ylläpitää useita objekteja, ei vain yhtä käyttö 2:ssa, joten se otetaan suoraan Poolista.

Tässä on tulostulos

f3cd5467-536b-4ffe-9c71-de53027b4869-itsvse.com-15.4.2020 klo 3:33:58
f3cd5467-536b-4ffe-9c71-de53027b4869-itsvse.com-15.4.2020 klo 3:33:58
True
b933b593-af6d-4ebe-b21b-e8784d124764-itsvse.com-15.4.2020 klo 3:33:58
False
Sama kuin käyttö 2:ssa, olemus on sama.

Käyttö 4

Vaikuttaa siltä, että yllä oleva käyttö ei ole kovin samanlainen kuin meidän normaali käyttömme. Meidän täytyy silti luottaa injektioon.

Katsotaanpa lopuksi, miten riippuvuusinjektio yhdistetään. Tietenkin tässä olennaisuus on edelleen erottamaton kahdesta asiasta: politiikasta ja palveluntarjoajasta.



Meidän täytyy ensin rekisteröidä palveluntarjoaja ja ottaa sen instanssi suoraan luodaksemme Object Poolin.

Jos haluat käyttää sitä muualla, voit injektoida sen konstruktorin kautta.

Tulos on tässäkin sama kuin ennen, ei ole paljon sanottavaa.

yhteenveto

Mutta riippumatta siitä, millaista käyttöä se on, meidän on ymmärrettävä, että Object Pool on erottamaton kolmesta henkilöstä: Pool, Policy ja Provider.

Näiden kolmen kanssa voimme ehkä tehdä mitä haluamme.

Tietenkin se tarjoaa myös useita erityisiä asioita, joita voit tutustua, jos olet kiinnostunut.

LeakTrackingObjectPool

StringBuilderPooledObjectPolicy





Edellinen:Johdatus Web Services Enhancements (WSE) 3.0:aan
Seuraava:Miten Visual Studio 2013 löytää sisältöä, joka korvaa useita rivejä?
 Vuokraisäntä| Julkaistu 2023-8-30 18:34:07 |
DefaultObjectPoolia käytetään taustalla olevalla tasollaConcurrentQueueSäikeiden turvallisuusjonon toteutuksessa, lähdekoodi on seuraava:


Hyperlinkin kirjautuminen on näkyvissä.


Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com