Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 30226|Odpověď: 1

[.NET Core] Podrobné vysvětlení objektového poolu v .NET Core

[Kopírovat odkaz]
Zveřejněno 15. 4. 2020 17:38:34 | | | |
Microsoft.Extensions.ObjectPool je součástí infrastruktury ASP.NET Core, která podporuje uchovávání sady objektů v paměti pro opětovné použití místo umožňování garbage collection objektů.
Pokud objekty, které chcete spravovat, jsou, možná budete muset použít objektové pooly:

  • Alokace/inicializace je nákladná.
  • Představuje omezený zdroj.
  • Používejte předvídatelně a často.


Opětovné využití je důležité téma a nevyhnutelný problém, se kterým se často setkáváme v našem každodenním vývoji.

Pro nejjednodušší a nejznámější příklad jsou databázové pooly spojení opakovaně využita databázová připojení.

Jaký má tedy smysl opětovného použití?

Jednoduše řečeno, snižuje zbytečné ztráty zdrojů.

Kromě databázových spojení může existovat mnoho dalších objektů, které je třeba znovu použít v různých scénářích nebo požadavcích, a existuje tzv. Object Pool.

Podobné funkce jste měli implementovat sami, buď s ConcurrentBag, ConcurrentQueue, nebo jinými řešeními.

To také sdílí implementaci v dokumentaci Microsoftu

Jak: Vytvořit objektový pool pomocí ConcurrentBag

Přihlášení k hypertextovému odkazu je viditelné.

Samozřejmě, v .NET Core nám Microsoft pomohl implementovat jednoduchý Object Pool.

Nejprve vytvořte nový .NET Core konzolový projekt a pomocí příkazu nuget přidejte následující balíček:

Veškerý kód je následující:

Použití 1



Před vytvořením poolu musíme definovat Politiku. Zde přímo používáme přiložený DefaultPooledObjectPolicy k jeho sestavení.

Objektový pool bude mít udržován maximální počet vláken.

Použijte metodu Get objektu poolu k vyjmutí objektu z object poolu.

Výše uvedený kód spustí výsledek

#1-464d2e03-604d-4451-b68a-8a3a2abdfccc-itsvse.com-1/1/0001 00:00
#2-70122aa0-a949-4c63-b878-321efe64c234-itsvse.com-1/1/0001 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
#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
#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
Tento výsledek ukazuje, že objekty v Object Poolu jsou přímo nové a některé vlastnosti nejsou znehodnoceny, což v tuto chvíli často nemá velký praktický význam.

Protože DefaultPooledObjectPolicy je přímo nový objekt, často to není to, co očekáváme!

Pokud chcete splnit naše skutečné využití, musíte si politiku stanovit sami!

Podívejme se na použití 2

Použití 2

Metoda Create se používá k vytvoření Demo objektu a metoda Return spočívá v vrácení Demo objektu zpět do Object Poolu (půjčené a vrácené).



Objektový pool je zde definován tak, aby obsahoval pouze jeden objekt.

Protože po vyjmutí z objektového poolu existuje jednokroková návratová operace, položka1 a položka2 by měly být stejný objekt.

Po vyjmutí položky 2 z objektového poolu se nevrátí, takže object pool vytvoří nový objekt na základě naší definované politiky.

Zde je výstupní výsledek použití 2:

985b3232-0a45-4115-8480-ad3d42c0ae10-itsvse.com-15.4.2020 3:31:15
985b3232-0a45-4115-8480-ad3d42c0ae10-itsvse.com-15.4.2020 3:31:15
True
8912424a-15c5-4891-b625-25b17eee5c8b-itsvse.com-15.4.2020 3:31:15
False
Vidíte, že jednotlivé vlastnosti položky1, položky2 a položky3 jsou stejné a položka1 a položka2 jsou skutečně stejný objekt. Položka 3 a položka 1 nejsou totéž.


Použití 3

Vidíte, že položka1 a položka2 jsou stejný objekt. Při načtení objektu z Object Poolu se vezme první, takže pokud ho vrátíte a znovu získáte, stále dostanete originál jako první.



item3 je převzat přímo z Object Poolu a není znovu vytvořen, protože Object Pool zde udržuje více objektů, ne jen jeden v Použití 2, takže je převzat přímo z Poolu.

Zde je výstupní výsledek

f3cd5467-536b-4ffe-9c71-de53027b4869-itsvse.com-15.4.2020 3:33:58
f3cd5467-536b-4ffe-9c71-de53027b4869-itsvse.com-15.4.2020 3:33:58
True
b933b593-af6d-4ebe-b21b-e8784d124764-itsvse.com-15.4.2020 3:33:58
False
Stejně jako u použití 2, podstata je stejná.

Použití 4

Zdá se, že výše uvedené použití není tak podobné našemu běžnému používání. Stále musíme spoléhat na injekce.

Takže se konečně podívejme na to, jak kombinovat závislostní injekce. Samozřejmě, podstata je stále neoddělitelná od dvou věcí – pojistky a poskytovatele.



Nejprve musíme zaregistrovat poskytovatele a poté přímo vzít jeho instanci a vytvořit Object Pool.

Pokud ji chcete použít jinde, můžete ji injektovat přes konstruktor.

Výsledek je zde také stejný jako předtím, není toho moc co dodat.

shrnutí

Ale bez ohledu na to, jaký typ použití to je, musíme pochopit, že Object Pool je neoddělitelný od tří členů – Pool, Policy a Provider.

S těmito třemi možná můžeme dělat, co chceme.

Samozřejmě nabízí také několik speciálních věcí, které si můžete vyzkoušet, pokud vás to zajímá.

LeakTrackingObjectPool

StringBuilderPooledObjectPolicy





Předchozí:Úvod do vylepšení webových služeb (WSE) 3.0
Další:Jak Visual Studio 2013 nachází obsah, který nahrazuje více řádků?
 Pronajímatel| Zveřejněno 30. 8. 2023 18:34:07 |
DefaultObjectPool se používá na základní úrovniConcurrentQueueImplementace fronty bezpečnosti vláken, zdrojový kód je následující:


Přihlášení k hypertextovému odkazu je viditelné.


Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com