Programmēšana

Kā izmantot objektu kopas dizaina modeli C #

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:

  1. Atgriezt nulli vai mest izņēmumu
  2. Bloķējiet zvanu, līdz objekts ir pieejams
  3. 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.