See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 30226|Vastuse: 1

[.NET tuum] Object Pooli üksikasjalik selgitus .NET Core'is

[Kopeeri link]
Postitatud 2020-4-15 17:38:34 | | | |
Microsoft.Extensions.ObjectPool on osa ASP.NET Core infrastruktuurist, mis toetab objektide kogumi hoidmist mälus taaskasutamiseks, selle asemel et lubada objektide prügi kogumist.
Kui objektid, mida soovid hallata, võivad vajada objektide kogumite kasutamist:

  • Eraldamine/initsialiseerimine on kulukas.
  • Esindab mõningaid piiratud ressursse.
  • Kasuta etteaimatavalt ja sageli.


Taaskasutus on oluline teema ja vältimatu probleem, millega me sageli igapäevases arengus kokku puutume.

Lihtsaima ja tuttavaima näitena on andmebaasi ühenduste basseinid taaskasutatud andmebaasiühendused.

Mis siis on taaskasutamise mõte?

Lihtsalt öeldes vähendab see tarbetut ressursikadu.

Lisaks andmebaasi ühendustele võib olla palju teisi objekte, mida tuleb erinevates olukordades või nõuetes taaskasutada, ning on olemas nn objektide kogum.

Sa oleksid pidanud ise sarnaseid funktsioone rakendama, kas ConcurrentBaki, ConcurrentQueue või teiste lahendustega.

See jagab ka Microsofti dokumentatsioonis olevat rakendust

Kuidas: luua objektide kogum, kasutades ConcurrentBagi

Hüperlingi sisselogimine on nähtav.

Loomulikult on Microsoft .NET Core'is aidanud meil rakendada lihtsat objektide pooli.

Esiteks loo uus .NET Core konsooliprojekt ja kasuta nuget käsku järgmise paketi lisamiseks:

Kõik koodid on järgmised:

Kasutus 1



Enne basseini loomist peame määratlema poliitika. Siin kasutame otse kaasasolevat DefaultPooledObjectPolicy selle koostamiseks.

Objektide poolil on maksimaalne arv lõime, mida hoitakse.

Kasuta basseini objekti Get meetodit, et võtta objekt objektide basseinist välja.

Ülaltoodud kood käivitab tulemuse

#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:00
#7-6874c64b-532d-4f92-a4fb-ff472da574a1-itsvse.com-1/1/0001 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
#10-fe89ed8b-4dfd-4eef-b876-b2a60ee50958-itsvse.com-1/1/0001 00:00:00
See tulemus näitab, et objektide kogumi objektid on otseselt uuendatud ning mõned omadused ei devalveerita, mis praegu sageli praktiliselt ei oma.

Kuna DefaultPooledObjectPolicy on otse uus objekt, pole see tihti see, mida ootame!

Kui soovid meie tegelikku kasutust täita, pead ise poliisi määratlema!

Vaatame kasutust 2

Kasutus 2

Create meetodit kasutatakse demo objekti loomiseks ning Return meetod on demo objekti tagasi Object Pooli (laenatud ja tagastatud) meetodit.



Objektide hulk on siin määratletud nii, et see sisaldab ainult ühte objekti.

Kuna pärast objekti basseinist eemaldamist toimub üheastmeline tagastusoperatsioon, peaksid üksus 1 ja item2 olema sama objekt.

Pärast seda, kui üksus 2 objektide basseinist välja võetakse, seda enam ei tagastata, seega loob objektide kogum uue objekti vastavalt meie defineeritud poliitikale.

Siin on kasutuse 2 väljundtulemus:

985b3232-0a45-4115-8480-ad3d42c0ae10-itsvse.com-15.04.2020 3:31:15 AM
985b3232-0a45-4115-8480-ad3d42c0ae10-itsvse.com-15.04.2020 3:31:15 AM
True
8912424a-15c5-4891-b625-25b17eee5c8b-itsvse.com-15.04.2020 03:31:15
False
Näed, et üksuse 1, üksuse 2 ja item3 individuaalsed omadused on samad ning üksus 1 ja item2 on tõepoolest sama objekt. Item 3 ja item1 ei ole sama asi.


Kasutus 3

Näed, et item 1 ja item2 on sama objekt. Kui tood objekti Object Poolist, võetakse esimene, nii et kui sa selle tagasi tood ja uuesti kätte saad, saad ikkagi originaali esimesena.



item3 võetakse otse sealt objektide poolist ega loo uuesti, sest objektide bassein hoiab mitut objekti, mitte ainult ühte kasutuses 2, seega võetakse see otse basseinist.

Siin on väljundtulemus

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
Sama mis kasutuses 2, on olemus sama.

Kasutus 4

Tundub, et ülaltoodud kasutus ei ole nii sarnane meie tavapärasele kasutusele. Me peame ikka lootma süstimisele.

Vaatame lõpuks, kuidas kombineerida sõltuvussüsti. Muidugi on siin olemus lahutamatu poliitika ja teenusepakkuja kahest asjast.



Esmalt peame registreerima teenusepakkuja ja seejärel võtma otse selle eksemplari, et luua objektide bassein.

Kui tahad seda mujal kasutada, saad selle läbi konstruktori süstida.

Tulemus on siin sama mis varem, palju pole öelda.

Kokkuvõte

Aga ükskõik millist kasutusviisi see ka poleks, peame mõistma, et Object Pool on lahutamatu kolmest mehest – Pool, Policy ja Provider.

Nende kolmega ehk saame teha, mida tahame.

Loomulikult pakub see ka mitmeid erilisi asju, mida saad uurida, kui oled huvitatud.

LeakTrackingObjectPool

StringBuilderPooledObjectPolicy





Eelmine:Sissejuhatus veebiteenuste täiustustesse (WSE) 3.0
Järgmine:Kuidas leiab Visual Studio 2013 sisu, mis asendab mitut rida?
 Üürileandja| Postitatud 2023-8-30 18:34:07 |
DefaultObjectPooli kasutatakse aluseks oleval tasemelConcurrentQueueLõime turvajärjekorra rakenduse puhul on lähtekood järgmine:


Hüperlingi sisselogimine on nähtav.


Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com