Programmēšana

Kā veikt slinku inicializāciju C #

Slinkā inicializācija ir paņēmiens, kas atliek objekta izveidi līdz pirmajai nepieciešamībai. Citiem vārdiem sakot, objekta inicializēšana notiek tikai pēc pieprasījuma. Ņemiet vērā, ka termini slinks inicializācija un slinks tūlītējs raksturs nozīmē vienu un to pašu - tos var izmantot kā aizstājamus. Izmantojot slinkās inicializācijas priekšrocības, varat uzlabot lietojumprogrammas veiktspēju, izvairoties no nevajadzīgas aprēķināšanas un atmiņas patēriņa. Šajā rakstā mēs apskatīsim, kā mēs varam veikt slinku inicializāciju C #.

Sapratīsim slinku iekraušanu ar vienkāršu piemēru. Apsveriet divas klases, Klients un Pasūtījums. The Klients klasē ir Pasūtījumi rekvizīts, kas savukārt atsaucas uz Pasūtījums klasē. The Pasūtījumi kolekcijā var būt liels datu apjoms, un, lai izveidotu savienojumu ar datu bāzi un izgūtu ierakstus, var būt nepieciešams savienojums ar datu bāzi. Šādā gadījumā nav jēgas ielādēt datus programmā Pasūtījumi līdz mums būs nepieciešami dati. Slinkā inicializācija ļauj mums ielādēt Pasūtījumi vākšanu tikai tad, kad tiek pieprasīti dati.

Lazy klases izmantošana C #

Lai gan jūs varat rakstīt savu pielāgoto kodu, lai ieviestu slinko inicializāciju, Microsoft iesaka izmantot Slinki klases vietā. The Slinki klase Sistēma nosaukumvieta C # tika ieviesta kā daļa no .Net Framework 4.0, lai nodrošinātu pavedieniem drošu veidu, kā īstenot slinku inicializāciju. Varat izmantot šīs klases priekšrocības, lai atliktu resursu ietilpīgu objektu inicializēšanu lietojumprogrammā.

Kad izmantojat Slinki klasē, tipa argumentā jums jānorāda objekta tips, kuru plānojat izveidot slinki. Ņemiet vērā, ka slinka inicializēšana notiek, kad piekļūstat Slinks. Vērtība īpašums. Šeit ir piemērs tam, kā Slinki klasi var izmantot:

Slinki pasūtījumi = jauns Slinks();

ISkaitāms rezultāts = lazyOrders.Value;

Apsveriet divas klases, Autors un Emuārs. Autors var rakstīt daudzus emuāra ierakstus, tāpēc jums ir saikne viens pret daudziem Autors un Emuārs klases, kā parādīts zemāk esošajā koda fragmentā.

sabiedrības klase Autors

    {

public int Id {get; komplekts; }

publiskā virkne FirstName {get; komplekts; }

publiskā virkne Uzvārds {get; komplekts; }

publiska virkne Adrese {get; komplekts; }

public List Blogs {get; komplekts; }

    }

sabiedrības klases emuārs

    {

public int Id {get; komplekts; }

public string Nosaukums {get; komplekts; }

public DateTime PublicationDate {get; komplekts; }

    }

Ņemiet vērā, ka savstarpējās attiecības starp Autors un Emuārs klases ir pārstāvētas, izmantojot a Saraksts īpašums (tipa Emuārs) iekš Autors klasē. Izmantojot šo rekvizītu, Autors klase var glabāt viena vai vairāku Emuārs klasē.

Tagad pieņemsim, ka lietotāja saskarnē mums jāparāda tikai autora informācija (vārds, uzvārds un adrese). Šajā gadījumā nav jēgas ielādēt autora emuāra informāciju; mēs gribam slinki ielādēt emuāra detaļas. Šeit ir atjaunināts Autors klase, kas risina šo vajadzību. Ievērojiet Slinki klasē.

sabiedrības klase Autors

    {

public int Id {get; komplekts; }

publiskā virkne FirstName {get; komplekts; }

publiskā virkne Uzvārds {get; komplekts; }

publiska virkne Adrese {get; komplekts; }

publika Slinks Emuāri => jauns slinks(() => GetBlogDetailsForAuthor (this.Id));

privāts IList GetBlogDetailsForAuthor (int Id)

        {

// Uzrakstiet kodu šeit, lai izgūtu visu autora emuāra informāciju.

        }

    }

Izmantojot vispārīgo Lazy klasi C #

Apskatīsim, kā mēs varam izmantot vispārīgo Slinki klasē, lai ieviestu Singleton dizaina modeli. (Šeit varat izlasīt manu rakstu par Singleton dizaina modeli.) Šī StateManager klase ir droša ar vītnēm. Tajā pašā laikā tas parāda slinku inicializāciju. Ņemiet vērā, ka tiešais statiskais konstruktors ir izmantots, lai nodrošinātu, ka C # kompilators neatzīmē veidu kā pirms lauka.

publiski aizzīmogota klases StateManager

    {

privāts StateManager ()

        {

        }

publiskā statiskā StateManager instance

        {

gūt

            {

atgriešanās Nested.obj;

            }

        }

privāta klase Ligzdota

        {

statisks ligzdots ()

            {

            }

iekšējais statiskais tikai lasāms StateManager obj = new StateManager ();

        }

    }

Šeit ir slinks programmas ieviešana StateManager klase, kas izmanto Slinki klasē. Jūs varat redzēt, kā Slinki klase padara slinkumu īstenošanu patiešām vienkāršu.

publiskās klases StateManager

    {

privāts statisks tikai lasāms Lazy obj = new Lazy (() => new StateManager ());

privāts StateManager () {}

publiskā statiskā StateManager instance

        {

gūt

            {

return obj.Value;

            }

        }

    }

Apskatiet Instance īpašums StateManager klases augstāk. Ņemiet vērā, ka Vērtība Īpašums, kuru redzat iepriekš minētajā koda piemērā, ir tikai lasāms. Šī iemesla dēļ nav noteikta piekļuves.

Slinkā inicializācija ir lieliska veiktspējas optimizācijas tehnika, kas ļauj atlikt tādu objektu inicializēšanu, kas patērē ievērojamus procesora un atmiņas resursus, līdz tie jums absolūti nepieciešami. Izmantojiet slinkās inicializācijas priekšrocības, lai uzlabotu savu lietotņu veiktspēju.

$config[zx-auto] not found$config[zx-overlay] not found