Veidojot lietojumprogrammas, jūs bieži sastopaties ar objektiem, kuru izveidošana ir diezgan dārga. Dažos gadījumos jaunu objektu izveides izmaksas ir pietiekami augstas, lai ietekmētu lietojumprogrammas veiktspēju. Šeit palīdz objektu baseina dizaina modelis.
Objektu kopas noformējuma modelis ir radošs noformējuma modelis, kas tiek izmantots objektu pārstrādei, nevis atjaunošanai katru reizi, kad lietojumprogrammai tie ir nepieciešami. Saglabājot objektu atkārtoti lietojamus gadījumus resursu fondā un pēc vajadzības tos izslēdzot, šis modelis palīdz samazināt objektu inicializācijas, eksponēšanas un iznīcināšanas izmaksas un uzlabot jūsu lietojumprogrammas veiktspēju.
Kad lietojumprogramma pieprasa objektu un objekts ir pieejams no kopas, tas tiek atgriezts no kopas. Ja pieprasītā tipa objekts nav pieejams no pūla, tiek izveidots un atgriezts jauns objekta gadījums. Kad lietojumprogrammai objekts vairs nav vajadzīgs, objekts tiek nosūtīts atpakaļ uz baseinu.
Ir konfigurējams minimālais un maksimālais objektu skaits, ko objektu kopa var turēt. Ja lietojumprogrammai ir nepieciešams objekts no kopas, bet ir piešķirts maksimālais objektu skaits, tipiska pielāgotu objektu kopas ieviešana var izmantot vienu vai vairākas no šīm stratēģijām:
- Atgriezt nulli vai mest izņēmumu
- Bloķējiet zvanu, līdz objekts ir pieejams
- Palieliniet baseina izmēru, lai tajā būtu vairāk objektu
Objektu kopa ir līdzīga datu bāzes savienojuma kopai. Tāpat kā savienojumu kopa kontrolē maksimālo savienojumu skaitu ar datu bāzi, objektu kopa kontrolē klases gadījumu skaitu, kurus lietos lietojumprogramma.
Vispārīga objektu kopas izveide C #
Tagad, kad mēs zinām pamatus, pievērsīsimies ieviešanai. Īstenojot objekta baseina dizaina modeli, mums jāņem vērā atkārtota izmantošana, vienkāršība, konfigurēšana un pat tādi faktori kā pavedienu drošība.
Šajā piemērā mēs izmantosim a Vienlaicīgs soma
klase objektu glabāšanai. Ņemiet vērā, ka Vienlaicīgs soma
klase Sistēma. Kolekcijas. Vienlaicīga
nosaukumvieta nodrošina bez bloķēšanas, diegiem drošu, nesakārtotu elementu kolekciju. Ņemiet vērā arī to, ka objektu ievietošana un noņemšana uz a Vienlaicīgs soma
ir ļoti ātra - it īpaši, ja viens un tas pats pavediens vienlaikus mēģina ievietot un izņemt priekšmetus no kolekcijas.
Šeit ir mūsu paraduma struktūra ObjectPool
klasē. Ievērojiet Vienlaicīgs soma
piemēram, objektu glabāšanai.
publiskā klase ObjectPool, kur T: jauns (){
privāti tikai lasāmi vienlaicīgas somas vienumi = new vienlaicīga soma ();
privāts int skaitītājs = 0;
privāts int MAX = 10;
publiska anulēšana (T vienums)
{
//DARĪT
}
publiskais T Get ()
{
//DARĪT
}
}
Šis koda fragments ilustrē programmas ieviešanu gūt
metodi. The gūt
method atgriež instanci no objektu kopas, ja tāda ir pieejama. Ja neviens nav pieejams, tiek izveidots un atgriezts jauns objekts. Abos šajos scenārijos skaitītājs
mainīgais tiek attiecīgi palielināts vai samazināts. Ņemiet vērā, ka tāpēc, ka mēs izmantojam vienlaicīgu kolekciju, t.i., Vienlaicīgs soma
šajā piemērā tiek rūpēta par vienlaicīgumu.
publiskais T Get (){
T vienums;
ja (vienumi. Izmēģiniet (izņemiet vienumu))
{
skaitītājs—;
atgriezt preci;
}
cits
{
T obj = jauns T ();
preces.Pievienot (obj);
skaitītājs ++;
atgriešanās obj;
}
}
The MAX
integer mainīgais šeit ir grūti kodēts, taču jūs varat padarīt to konfigurējamu. Šī klase nav noslēgta vai statiska, tāpēc jūs varat to pagarināt, kā vēlaties.
The Atlaidiet
metodi izmanto, lai atbrīvotu objektus, kas vairs nav vajadzīgi, atpakaļ objektu kopā. Tas pārbauda, vai skaitītājs
mainīgais ir mazāks par MAX
mainīgais un, ja tā, pievieno tam nodoto objektu kā parametru kolekcijai.
publiska anulēšana (T vienums){
ja (skaitītājs <MAX)
{
preces.Pievienot (prece);
skaitītājs ++;
}
}
Pieņemot, ka esat izveidojis klasi ar nosaukumu Mana klase
, šeit ir norādīts, kā to var pievienot objektu kopai, izmantojot ObjectPool
klasē.
static void Main (virkne [] args){
ObjectPool objPool = jauns ObjectPool ();
MyClass obj = objPool.Get ();
objPool.Release (obj);
Konsole. Lasīt ();
}
Varat modificēt šo pielāgoto objektu kopas ieviešanu, lai ļautu minimālos un maksimālos pūļa izmērus nolasīt no konfigurācijas faila. Objekta kopas inicializācijas ietvaros varat arī pārliecināties, ka tajā ir minimālais objektu skaits.
Objektu kopas palīdz samazināt resursu pieskaitāmo daudzumu, kad nepieciešami vairāki klases gadījumi, kuru izveidošana vai pārvaldīšana ir dārga. Ja jūsu lietojumprogrammā atkal un atkal tiek izmantotas vienas un tās pašas klases, izmantojiet šo dizaina modeli, lai nodrošinātu optimālu veiktspēju.