Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 30226|Atbildi: 1

[.NET kodols] Detalizēts skaidrojums par objektu pūlu .NET Core

[Kopēt saiti]
Publicēts 2020-4-15 17:38:34 | | | |
Microsoft.Extensions.ObjectPool ir daļa no ASP.NET Core infrastruktūras, kas atbalsta objektu kopas saglabāšanu atmiņā atkārtotai izmantošanai, nevis atļauj objektu atkritumu savākšanu.
Ja objekti, kurus vēlaties pārvaldīt, ir, iespējams, būs jāizmanto objektu pūli:

  • Piešķiršana / inicializācija ir dārga.
  • Pārstāv dažus ierobežotus resursus.
  • Izmantojiet paredzami un bieži.


Atkārtota izmantošana ir svarīga tēma un neizbēgama problēma, ar kuru mēs bieži sastopamies ikdienas attīstībā.

Vienkāršākais un pazīstamākais piemērs: datu bāzes savienojumu baseini ir atkārtoti izmantoti datu bāzes savienojumi.

Tātad, kāda ir atkārtotas izmantošanas jēga?

Vienkārši sakot, tas samazina nevajadzīgus resursu zudumus.

Papildus datu bāzes savienojumiem var būt daudz citu objektu, kas jāizmanto atkārtoti dažādos scenārijos vai prasībās, un ir tā sauktais objektu kopums.

Jums pašam vajadzēja ieviest līdzīgas funkcijas vai nu ar ConcurrentBag, vai ConcurrentQueue, vai ar citiem risinājumiem.

Tas arī koplieto ieviešanu Microsoft dokumentācijā

Kā: objektu kopas izveide, izmantojot ConcurrentBag

Hipersaites pieteikšanās ir redzama.

Protams, .NET Core Microsoft ir palīdzējusi mums ieviest vienkāršu objektu pūlu.

Vispirms izveidojiet jaunu .NET Core konsoles projektu un izmantojiet komandu nuget, lai pievienotu šādu pakotni:

Viss kods ir šāds:

Lietošana 1



Pirms fonda izveides mums ir jādefinē politika. Šeit mēs tieši izmantojam iekļauto DefaultPooledObjectPolicy, lai to izveidotu.

Objektu pūlā tiks uzturēts maksimālais pavedienu skaits.

Izmantojiet pūla objekta metodi Iegūt, lai izņemtu objektu no objektu pūla.

Iepriekš minētais kods palaiž rezultātu

#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
#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
#10-fe89ed8b-4dfd-4eef-b876-b2a60ee50958-itsvse.com-1/1/0001 12:00:00
Šis rezultāts parāda, ka objektu baseina objekti ir tieši jauni, un daži rekvizīti netiek devalvēti, kam šobrīd bieži nav lielas praktiskas nozīmes.

Tā kā DefaultPooledObjectPolicy ir jauns objekts tieši, daudzas reizes tas nav tas, ko mēs sagaidām!

Ja vēlaties apmierināt mūsu faktisko izmantošanu, jums pašam ir jādefinē polise!

Apskatīsim 2. lietojumu

Lietošana 2

Metode Create tiek izmantota, lai izveidotu demonstrācijas objektu, un atgriešanas metode ir demonstrācijas objekta izmešana atpakaļ objektu pūlā (aizņemts un atgriezts).



Objektu pūls šeit ir definēts, lai tajā būtu tikai viens objekts.

Tā kā pēc izņemšanas no objektu pūla tiek veikta viena soļa atgriešanas operācija, vienumam1 un vienumam2 jābūt vienam un tam pašam objektam.

Pēc item2 izņemšanas no objektu pūla tas netiek atgriezts, tāpēc objektu pūls izveidos jaunu objektu, pamatojoties uz mūsu definēto politiku.

Šeit ir 2. lietošanas rezultāts:

985b3232-0a45-4115-8480-ad3d42c0ae10-itsvse.com-4/15/2020 3:31:15
985b3232-0a45-4115-8480-ad3d42c0ae10-itsvse.com-4/15/2020 3:31:15
True
8912424a-15c5-4891-b625-25b17eee5c8b-itsvse.com-4/15/2020 3:31:15
False
Jūs varat redzēt, ka item1, item2 un item3 atsevišķie rekvizīti ir vienādi, un item1 un item2 patiešām ir viens un tas pats objekts. 3. un 1. punkts nav viens un tas pats.


Lietošana 3

Jūs varat redzēt, ka item1 un item2 ir viens un tas pats objekts. Iegūstot objektu no objektu kopas, pirmais tiks ņemts, tāpēc, ja jūs to atgriezīsit un atkal atgūsiet, jūs joprojām saņemsiet oriģinālu.



item3 tiek ņemts tieši no objektu kopas un netiek izveidots vēlreiz, jo objektu baseins šeit uztur vairākus objektus, nevis tikai vienu 2. lietojumā, tāpēc tas tiek ņemts tieši no baseina.

Šeit ir izejas rezultāts

f3cd5467-536b-4ffe-9c71-de53027b4869-itsvse.com-4/15/2020 3:33:58
f3cd5467-536b-4ffe-9c71-de53027b4869-itsvse.com-4/15/2020 3:33:58
True
b933b593-af6d-4ebe-b21b-e8784d124764-itsvse.com-4/15/2020 3:33:58
False
Tāpat kā 2. lietojums, būtība ir tāda pati.

Lietošana 4

Šķiet, ka iepriekš minētais lietojums nav tik līdzīgs mūsu parastajam lietojumam. Mums joprojām ir jāpaļaujas uz injekciju.

Tātad beidzot apskatīsim, kā apvienot atkarības injekciju. Protams, būtība šeit joprojām ir neatdalāma no divām lietām - Politika un Nodrošinātājs.



Vispirms mums ir jāreģistrē pakalpojumu sniedzējs un pēc tam tieši jāizmanto tā instance, lai izveidotu objektu baseinu.

Ja vēlaties to izmantot citur, varat to injicēt caur konstruktoru.

Rezultāts šeit ir arī tāds pats kā iepriekš, nav daudz ko teikt.

Kopsavilkuma

Bet neatkarīgi no tā, kāda veida tas ir, mums ir jāsaprot, ka Object Pool ir neatdalāms no trim puišiem Pool, Policy un Provider.

Ar šiem trim, varbūt mēs varam darīt visu, ko vēlamies.

Protams, tas piedāvā arī vairākas īpašas lietas, kuras varat pārbaudīt, ja jūs interesē.

LeakTrackingObjectPool

StringBuilderPooledObjectPolicy





Iepriekšējo:Iepazīšanās ar tīmekļa pakalpojumu uzlabojumiem (WSE) 3.0
Nākamo:Kā Visual Studio 2013 atrod saturu, kas aizstāj vairākas rindiņas?
 Saimnieks| Publicēts 2023-8-30 18:34:07 |
DefaultObjectPool tiek izmantots pamatā esošajā līmenīVienlaicīga rindaThread drošības rindas ieviešana, avota kods ir šāds:


Hipersaites pieteikšanās ir redzama.


Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com