Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 20516|Vastaus: 0

[Vinkkejä] Neljäkymmentäseitsemän tapaa optimoida C#-ohjelma

[Kopioi linkki]
Julkaistu 15.3.2018 10.41.59 | | |

1. Korvaa saavutettavat kentät attribuuteilla

1、. .NET-datan sitominen tukee vain datan sitomista, ja data binding -etuja voi hyödyntää attribuutteja.
2. Get and Set access to propertyssa voit käyttää lukkoa lisätäksesi monisäikeisyyden tuen.

2. vain luku (ajonaikainen vakio) ja const (käännösaikavakio)

1. const voidaan käyttää vain primitiivisille tyypeille, enumeille ja merkkijonoille, kun taas readonly-versio voi olla mikä tahansa tyyppi;
2. const korvataan käännösvaiheessa tietyllä vakiolla, joten jos viitteessä käytetään sekä const- että readonly-arvoja, muutos readonly-arvoon muuttaa suunnittelun alkuperäistä tarkoitusta, joka on tarpeen kääntää uudelleen uuden vakioarvon uudelleenviitamiseksi.
3. Const on tehokkaampi kuin pelkkä luku, mutta menettää sovelluksen joustavuuden.

3. IS ja AS

1. Molemmat ovat tyyppimuunnoksia ajonaikaisesti, sillä operaattoreita voidaan käyttää vain viitetyypeissä, kun taas se voi käyttää arvoja ja referenssityyppejä;
2. Tavallinen käytäntö on käyttää IS:ää tyypin määrittämiseen ja sitten valikoivasti käyttää vahvaa tyyppimuunnosoperaattoria (operaattorin määrittelemä muunnosoperaattori).

4. ConditionalAttribute #if #endif条件编译 sijaan

1. ConditionalAttributea käytetään vain metoditasolla, ja muut kohteet kuten tyypit, attribuutit jne. ovat virheellisiä. Ja #if #endif则不受此限制;
2. ConditionalAttribute voi lisätä useita OR (OR) -operaatioita käännösehdoille, ja #if #endif则可以添加与(AND) [tässä voidaan määritellä täysin erilliseksi symboliksi];
3. ConditioanlAttribute-määritelmä voidaan sijoittaa erilliseen menetelmään, jotta ohjelma olisi joustavampi.

5. Tarjoa ToString()-menetelmä

1. Se voi tarjota käyttäjille yksityiskohtaista tietoa ystävällisemmin;
2. Käytä IFormatter.ToString()-menetelmää joustavamman muokkauksen tarjoamiseen, ja jos lisäät IFormatProvider- ja ICustomFormatter-rajapinnat, viestin tulosteen räätälöinti on järkevämpää.

6. Ero arvon ja viitetyypin välillä

1. Arvotyypit eivät tue polymorfismia, joka soveltuu sovellusten ylläpitämien tietojen tallentamiseen, kun taas viittaukset tukevat polymorfismia, joka soveltuu sovelluskäyttäytymisen määrittämiseen.
2. Arvotyypeinä määritellyille taulukoille ohjelman suorituskykyä voidaan parantaa merkittävästi;
3. Arvotyypissä on vähemmän kasamuistin pirstoutumista, muistin roskaa ja epäsuoraa käyttöaikaa, ja sen palautus metodissa tapahtuu replikaationa, jotta sisäinen rakenne ei paljastuisi ulkomaailmalle.
4. Arvotyyppejä käytetään seuraavissa tilanteissa: Tyyppien vastuut ovat pääasiassa datan tallennuksessa; Julkiset rajapinnat määritellään kokonaan joidenkin datajäsenten pääsyattribuuttien avulla; Alaluokkia ei koskaan ole; Polymorfista käyttäytymistä ei koskaan ole.

7. Arvotyypit tulisi toteuttaa mahdollisimman vakio- ja atomityyppisiä

1. Tehdä koodistamme helpommin kirjoitettavaa ja ylläpitoa;
2. Kolme strategiaa vakioiden alustumiseen: rakentamisessa; kasvimenetelmä; Rakenna muokattava apuluokka (esim. StringBuilder).

8. Varmista, että arvo 0 on kelvollinen asema

1. Arvotyypin oletustilan tulisi olla 0;
2. Enum-tyypin 0 ei saa olla virheellinen; FlagsAttributessa varmistetaan, että arvo 0 on kelvollinen tila;
3. Kun lanka on tyhjä, lanka voidaan palauttaa. tyhjä merkkijono tyhjälle.

9. Moniedustukselliset suhteet, joissa on tasa-arvoinen arvostelukyky

1. ReferenceEquals() määrittää, että viittaukset ovat yhtä suuret, ja sen täytyy olla tosi, kun molemmat viittaavat samaan objektiin.
2. Staattista Equals()-menetelmää käytetään ensin viitearvion tekemiseen ja sitten arvotyypin arviointiin;
3. Viitetyypin arvioinnissa voit käyttää uudelleenkirjoitusmenetelmää Equals(), kun käytetään arvosemantiikkaa.
4. Kun Equals()-metodia kirjoitetaan uudelleen, myös GetHashCode()-metodi tulee kirjoittaa uudelleen, ja operater==() -operaatio tulee samanaikaisesti toimia.

10. Ymmärrä GetHashCode()-menetelmän puutteet

1. GetHashCode() sovelletaan vain hajautusarvoihin hash-pohjaisilla **-määritellyillä avaimilla, kuten HashTablella tai Dictionaryllä;
2. GetHashCode():n tulee noudattaa vastaavia kolmea sääntöä: kahden yhtä suuren objektin tulee palauttaa sama hajautuskoodi; pitäisi olla instanssi-invariantti; Hajautusfunktion tulisi tuottaa satunnaisjakauma kaikille kokonaisluvuille.

11. Anna etusija foreach loop -lauseiden käytölle

1. foreach voi poistaa kääntäjän tarkistuksen for-silmukan taulukon rajalle;
2. Forachin pyöreä muuttuja on vain luku -käytettävissä, ja on olemassa eksplisiittinen muunnos, joka heittää poikkeuksen, kun **-objektin objektityyppi on virheellinen;
3. **, joka vaaditaan käytettäväksi jokaisessa on: julkinen GetEnumberator()-metodi; IEnumeroitava rajapinta on eksplisiittisesti toteutettu. IEnumerator-rajapinta on toteutettu;
4. foreach voi tuoda resurssien hallinnan etuja, koska jos kääntäjä pystyy määrittämään IDisposable interfacen, se voi käyttää optimoitua try... lopulta blokki;

12. Oletuskentän alustus on parempi kuin assignointilause

1. Kentän elinkaari alustaa arvotyypin nollaksi ja viitetyypin nollaksi oletuksena.
2. Saman objektin alustaminen useaan otteeseen heikentää koodin suoritustehokkuutta.
3. Kentän alustuksen sijoittaminen konstruktoriin edistää poikkeusten käsittelyä.

13. Käytä staattista konstruktoria staattisten jäsenten alustamiseen

1. Staattinen konstruktori suoritetaan ennen kuin mikään luokan metodi, muuttuja tai attribuutti on saavutettu;
2. Staattiset kentät toimivat myös ennen staattista konstruktoria, ja staattinen konstruktori edistää poikkeusten käsittelyä.

14. Käytä konstruktoriketjua (in. NET 4.0 ratkaisee tämän ongelman jo valinnaisilla parametreilla)

1. Käytä tätä luovuttaaksesi alustustyön toiselle konstruktorille ja käytä basea kutsumaan perusluokan konstruktori;
2. Tyyppiinstanssien operaatiosarja on: aseta kaikki staattiset kentät arvoon 0; Staattisten kenttäalustuslaitteiden suorittaminen; staattinen konstruktori, joka suorittaa perusluokan; Staattiset konstruktorit, jotka suorittavat nykyisen tyypin;
Aseta kaikki instanssikentät arvoon 0; Suorita instanssikentän alustajat; Suorita sopiva perusluokan instanssirakentaja; Suorita nykyisen tyypin instanssikonstruktori.

15. Käytä käyttämistä ja try/final-lauseita resurssien puhdistamiseen

IDisposable-rajapinnan Dispose()-menetelmässä GC.SuppressFinalize() voidaan käyttää ilmoittamaan jätekerääjälle, että lopullista operaatiota ei enää suoriteta.

16. Minimoi muistiroska

1. Esineiden jakaminen ja tuhoaminen kasassa vie prosessorilta ylimääräistä aikaa;
2. Menetelmät määritettyjen objektien määrän vähentämiseksi: usein käytetyt paikalliset muuttujat ylennetään kentiksi; Tarjoaa luokan, joka tallentaa yleisiä Singleton-olioiden instansseja, jotka ilmaisevat tiettyjä tyyppejä.
3. Käytä StringBuilderia monimutkaisten merkkijonooperaatioiden suorittamiseen.

17. Vähättele pakkaamista ja purkamista

1. Kiinnitä huomiota tyypin implisiittiseen muunnokseen System.Objectiksi, eikä arvotyyppiä tulisi korvata System.Object-tyypillä;
2. Rajapintojen käyttäminen tyyppien sijaan voi välttää laatikoinnin, eli arvotyyppien toteuttamisen rajapinnoista ja jäsenten kutsumisen rajapintojen kautta.

18. Toteuta standardi Dispo-tila

1. Jotta voi käyttää ei-muistiresursseja, sillä täytyy olla viimeistelijä, roskankerääjä lisää toteutetut viimeistelijän objektit lopetusjonoon sen jälkeen, kun muistiobjektit, jotka eivät ole lopettaneet, on suoritettu, ja roskien kerääjä aloittaa uuden säikeen suorittaakseen viimeistelijät näille objekteille. Tämä voi välttää muistivuodon, joka johtuu siitä, että hallitsemattomia muistiresursseja ei vapauteta.
2. IDisposable.Dispose()-menetelmän käyttö vaatii neljä työn osa-aluetta: kaikkien hallitsemattomien resurssien vapauttamista; Vapauta kaikki hallinnoidut resurssit; Aseta tilamerkki osoittamaan, onko Dispose() suoritettu; Kutsu GC.SuppressFinalize(this) peruuttaaksesi objektin päätysoperaation;
3. Lisää suojattu virtuaalimetodi Dispose() polymorfismiin vaativaan tyyppiin, ja johdettu luokka vapauttaa tehtävänsä kirjoittamalla tämän metodin uudelleen.
4. Tyypissä, joka vaatii IDisoposoitavan rajapinnan, meidän tulisi toteuttaa terminaattori, vaikka emme sitä tarvitsisikaan.

19. Määrittele ja toteuta rajapinnat perintötyyppien yli

1. Toisistaan riippumattomat tyypit voivat yhdessä toteuttaa yhteisen rajapinnan, ja rajapinnan toteuttaminen on helpompaa kuin periytyminen;
2. Rajapinta on suhteellisen vakaa, se kapseloi joukon funktioita rajapintaan muiden toteutussopimusten muodossa, kun taas perusluokkaa voidaan laajentaa ajan myötä.

20. Erota rajapinnan toteutus ja virtuaalisen metodin uudelleenkirjoittaminen

1. Kun rajapinta toteutetaan perusluokassa, johdettu luokka tarvitsee käyttää new -menetelmää peittääkseen perusluokan metodin;
2. Perusluokkarajapinnan metodi voidaan julistaa virtuaaliseksi metodiksi ja toteuttaa johdetussa luokassa.

21. Käytä luottamuksia takaisinkutsujen ilmaisemiseen

1. Delegaatti itsessään ei tarjoa poikkeuskaappausta, joten mikä tahansa monilähetyksen edustajakutsu päättää koko puheluketjun.
2. Näyttämällä ja kutsumalla jokaisen delegointikohteen delegaattiketjussa voit välttää, että monilähetysdelegaatit palauttavat vain viimeisen delegaatin tuloksen.

22. Käytä tapahtumia ulkoisten rajapintojen määrittelyyn

1. Se tulisi julistaa yleiseksi tapahtumaksi, ja antaa kääntäjän luoda meille lisäys- ja renmove-metodit.
2. Käytä System.ComponentModel.EventHandlerList -konttia tallentaaksesi jokaisen tapahtumakäsittelijän, ja käytä sitä kaikkien tapahtumien monimutkaisuuden piilottamiseen, kun tyyppi sisältää suuren määrän tapahtumia.

23. Vältä viittauksia sisäisiin luokkaobjekteihin

1. Koska arvotyypin objektin käyttö luo kopion objektista, arvotyypin määrittely ei muuta tilaa tyyppiobjektin sisällä lainkaan;
2. Vakiotyypit voivat välttää objektin tilan muuttamisen;
3. Määrittele rajapinta rajoittamaan pääsyä osajoukkoon siten, että objektin sisäisen tilan vauriot minimoidaan.
4. Määrittele kääreobjekti rajoittamaan pääsyä toiseen objektiin;
5. Kun asiakaskoodi muuttaa sisäisiä tietoelementtejä, voidaan ottaa käyttöön Observer-tila, jolloin objekti voi tarkistaa tai vastata muutoksia.

24. Deklaratiivinen ohjelmointi on parempi kuin imperatiivinen ohjelmointi

Virheiden tekeminen useissa samankaltaisissa käsin kirjoitetuissa algoritmeissa voidaan välttää ja tarjota selkeää ja luettavaa koodia.

25. Toteuta tyypit mahdollisimman sarjoiteltavissa

1. Tyyppi ei edusta käyttöliittymän ohjausta, ikkunaa tai lomaketta, ja tyypin tulisi tukea sarjallistamista;
2. Kun lisätään NonSerializedAttributen deserialisoitu attribuutti, oletusarvo voidaan ladata OnDeserialization()-menetelmällä, joka toteuttaa IDeserializationCallback;
3. Versionhallinnassa voit käyttää ISerializable-rajapintaa joustavaan ohjaukseen ja tarjota serialisointikonstruktorin objektien alustamiseen virran datan mukaan, ja lisäksi tarvitaan SerializationFormatter -poikkeusten käyttöoikeus toteutuksessa.
4. Jos sinun täytyy luoda johdettu luokka, sinun täytyy antaa johdetulle luokalle koukkumetodi.

26. Käytä IComparable- ja IComparer-rajapintoja lajittelusuhteiden toteuttamiseen

1. IComparable-rajapintaa käytetään toteuttamaan luonnollisin lajittelusuhde tyypeille, ylikuormittamaan neljä vertailuoperaattoria ja tarjoamaan ylikuormitettu versio CompareTo()-menetelmästä tiettyjen tyyppien hyväksymiseen parametreina.
2. ICompareria käytetään tarjoamaan lajittelusuhteita, jotka poikkeavat IComparablesta, tai tarjoamaan meille lajittelulusuhteita, joita tyyppi itse sanoo olevan toteutumattomia.

27. Vältä ICloneable-liitäntöjä

1. Arvotyypeille ei tarvitse tukea ICloneable interfacea, vaan käytä oletusmääritystoimintoa;
2. Perusluokille, jotka saattavat tarvita ICloneable -rajapintojen tukemista, niille tulisi luoda suojattu replikaatiokonstruktori, ja ICone-yhteensopivia rajapintoja tulisi välttää.

28. Vältä pakotettuja muunnosoperaattoreita

Konstruktorien käyttö muunnosoperaattoreiden sijaan voi tehdä muunnoksesta selkeämmän, mikä voi helposti aiheuttaa outoja bugeja, joita käytetään väliaikaisissa objekteissa muunnoksen jälkeen.

29. Harkitse uuden modifikaattorin käyttöä vain, kun uusien versioiden kertyminen aiheuttaa ongelmia

30. Toteuta CLS-yhteensopivat kokoonpanot mahdollisimman paljon
1. Yhteensopivan assemblyn luomiseksi on noudatettava kahta sääntöä: kaikkien julkisten ja suojattujen assemblyn jäsenten käyttämien parametrien ja palautusarvotyyppien on oltava yhteensopivia CLS:n kanssa; Jokaisella julkisella ja suojatulla jäsenellä, joka ei ole yhteensopiva CLS:n kanssa, on oltava CLS-yhteensopiva vaihtoehto;
2. Voit ohittaa CLS-yhteensopivuustyyppitarkistuksen toteuttamalla rajapinnan eksplisiittisesti, eikä CLSCompliantAttribute tarkista yksityisten jäsenten CLS-yhteensopivuutta.

31. Toteuta mahdollisimman lyhyt ja ytimekäs menetelmä

1. JIT-kääntäjä kääntää metodiyksiköissä, ja metodeja, joita ei kutsuta, JIT ei käännä;
2. Jos pidemmän Switchin Case-lauseen koodi korvataan yhdellä metodilla kerrallaan, JIT-kääntäjän säästämä aika moninkertaistetaan;
3. Lyhyet ja ytimekkäät menetelmät sekä vähemmän paikallisia muuttujia valitsemalla voidaan optimoida rekisterin käyttö;
4. Mitä vähemmän ohjaushaaroja metodissa, sitä helpompaa JIT-kääntäjän on sijoittaa muuttujia rekistereihin.

32. Toteuta mahdollisimman paljon pieniä kokoja ja korkean yhtenäisyyden kokoonpanoja

1. Laita kaikki julkiset luokat ja common base -luokat joihinkin assemblyihin, laita työkaluluokat, jotka tarjoavat toimintoja julkisille luokille, samaan assemblyyn, pakkaa asiaankuuluvat julkiset rajapinnat omiin assemblyihinsä ja lopuksi käsittele ne luokat, jotka ovat laajasti vaakatasossa sovelluksessa;
2. Periaatteessa tulisi luoda kahta tyyppiä komponentteja: toinen on pieni ja yhdistetty kokoonpano, jolla on tietty funktio, ja toinen on suuri ja laaja kokonaisuus, jolla on yhteiset toiminnot.

33. Rajoita tyyppien näkyvyyttä

1. Rajapintojen käyttäminen tyyppien funktioiden paljastamiseen helpottaa sisäisten luokkien luomista rajoittamatta niiden saatavuutta assemblyn ulkopuolella;
2. Mitä vähemmän julkisia tyyppejä altistuu ulkomaailmalle, sitä enemmän vaihtoehtoja sinulla on tuleviin laajentumis- ja muutostoteutuksiin.

34. Luo laaja-alainen verkkorajapinta

Tämä minimoi koneiden välisten tapahtumien tiheyttä ja kuormaa, jolloin palvelimelle tulee suuria operaatioita ja tarkkoja suorituksia.

35. Uudelleenkirjoittaminen on parempi kuin tapahtumaprosessorit

1. Jos tapahtumaprosessori heittää poikkeuksen, muita tapahtumaketjun prosessoreita ei kutsuta, mutta tämä ei tapahdu uudelleenkirjoitetulle virtuaalimetodille.
2. Uudelleenkirjoittaminen on paljon tehokkaampaa kuin assosiatiiviset tapahtumaprosessorit, joiden täytyy käydä läpi koko pyyntölista, mikä vie enemmän prosessorin aikaa.
3. Tapahtumiin voidaan vastata ajonaikaisesti, joustavammin, ja samaan tapahtumaan voidaan liittää useita vastauksia.
4. Yleinen sääntö on käsitellä johdettu tapahtuma, ja uudelleenkirjoitusmenetelmä on parempi.

36. Reilu käyttö. .NET-ajonaikainen diagnostiikka

1. System.Diagnostics.Debug\Trace\EventLog tarjoaa kaikki työkalut, joita ohjelma tarvitsee diagnostiikkatietojen lisäämiseksi ajonaikaan, ja sovellus voi kirjoittaa järjestelmän tapahtumalokiin, kun EventLog tarjoaa ainesosan;
2. Lopuksi, älä kirjoita omaa diagnostiikkakirjastoasi, .NET FCL:llä on jo tarvittava ydinkirjasto.

37. Käytä standardoituja konfigurointimekanismeja

1、. .NET-kehyksen System.Windows.Application -luokka määrittelee meille ominaisuudet yhteisen konfiguraatiopolun määrittämiseksi;
2. Application.LocalAppDataPath ja Application.userDataPath tuottavat paikallisen tietohakemiston ja käyttäjädatan polkunimet;
3. Älä kirjoita dataa ProgramFiles- ja Windows-järjestelmähakemistoihin, näissä paikoissa vaaditaan korkeampia turvallisuusoikeuksia, älä odota käyttäjiltä kirjoitusoikeuksia.

38. Muokkaa ja tue datan sitomista

1. BindingManangerin ja CurrencyManagerin kaksi objektia toteuttavat tiedonsiirron ohjaimen ja tietolähteen välillä;
2. Tietojen sitomisen edut: tietojen sitomisen käyttö on paljon yksinkertaisempaa kuin oman koodin kirjoittaminen; Sitä tulisi käyttää myös muille laajuuksille kuin tekstitietokohteille – myös muita näyttöominaisuuksia voidaan sitoa; Windowos Forms -tietosidonnauksissa kyky hallita useita ohjaussynkronointia tarkistuksiin liittyvissä tietolähteissä;
3. Kun objekti ei tue vaadittuja attribuutteja, voit tukea datan sitomista estämällä nykyisen objektin ja lisäämällä halutun objektin.

39. Käytä. .NET-validointi

1. ASP.NET on viisi kontrollia validisuuden varmistamiseksi, ja voit käyttää CustomValidatoria uuden luokan luomiseen oman autentikointilaitteen lisäämiseksi.
2. Windowsin validointi vaatii ali-System.Windows.Forms.Control.Validating -yksikön tapahtumankäsittelijän kirjoittamiseen.

40. Valitse sopiva ** tarpeiden mukaan

1. Taulukossa on kaksi ilmeistä vikaa: sitä ei voida dynaamisesti muuttaa kokoa; Koon muuttaminen vie aikaa;
2. ArrayList yhdistää yksiulotteisen taulukon ja linkitettyjen listojen ominaisuudet, Queue ja Stack ovat erityisiä taulukoita, jotka perustuvat Arrayhin;
3. Kun ohjelma on joustavampi lisäämään ja poistamaan kohteita, se voi tehdä kestävämpiä tyyppejä, ja luotaessa luota, joka simuloi **:tä, sen tulisi toteuttaa indeksoijat ja IE-numeroitavat rajapinnat sille.

41. DataSet on parempi kuin mukautettu rakenne

1. Dataseteillä on kaksi haittaa: XML-sarjoittamismekanismin ja non-.NET-koodin välinen vuorovaikutus ei ole kovin hyvää; DataSet on erittäin monipuolinen säiliö;
2. Vahvat dataset-tyypit rikkovat enemmän suunnittelusääntöjä, ja niiden kehitystehokkuus on huomattavasti korkeampi kuin itse kirjoittamien, elegantimpien suunnitelmien.

42. Käytä ominaisuuksia reflektion yksinkertaistamiseksi

Suunnittelemalla ja toteuttamalla ominaisuusluokkia, jotka pakottavat kehittäjät määrittelemään dynaamisesti käytettäviä tyyppejä, menetelmiä ja attribuutteja, voit vähentää sovelluksen ajonaikaisia virheitä ja parantaa ohjelmiston käyttäjätyytyväisyyttä.

43. Vältä refleksien liiallista käyttöä

1. Invoke-jäsenten käyttämät parametrit ja palautusarvot ovat System.Object, joka muuntaa tyyppejä ajonaikaisesti, mutta ongelmien mahdollisuus on kasvanut.
2. Rajapinta mahdollistaa selkeämmän ja helpommin ylläpidettävän järjestelmän, ja heijastus on erittäin tehokas myöhäinen sitoutumismekanismi. .NET-kehys käyttää sitä datasidonnan toteuttamiseen Windowsin ja web-ohjauksille.

44. Luo sovellukselle erityiset poikkeusluokat

1. Ainoa syy, miksi eri poikkeusluokkia tarvitaan, on se, että käyttäjät voivat helposti lähestyä eri virheitä catch-prosessoreita kirjoittaessaan;
2. Kun korjauskäyttäytymisiä voi olla erilaisia, meidän tulisi luoda erilaisia poikkeusluokkia, ja antamalla kaikki poikkeuspohjaluokan tukemat konstruktorit, voimme luoda täysin toimivan poikkeusluokan sovellukselle ja käyttää InnerException-attribuuttia tallentaaksemme kaikki alemman tason virheehtojen tuottamat virhetiedot.

45. Anna etusija poikkeaville turvallisuustakeille

1. Vahva poikkeustakuu tarjoaa parhaan tasapainon poikkeuspalautuksen ja yksinkertaistetun poikkeuskäsittelyn välillä, ja ohjelman tila pysyy muuttumattomana, kun operaatio keskeytyy poikkeuksen vuoksi.
2. Tehdä puolustava kopioi muokattavasta datasta, muuttaa näiden tietojen puolustavaa kopiota, keskellä oleva operaatio voi aiheuttaa poikkeuksen, ja väliaikainen kopio sekä alkuperäinen objekti vaihdetaan;
3. Terminaattorit, Dispose()-menetelmät ja kohdemenetelmät, jotka on sidottu delegaatiin, tulisi varmistaa, etteivät ne tee poikkeuksia missään olosuhteissa.

46. Minimoi yhteentoimivuus

1. Yhteentoimivuudella on kolme kustannusta: hallitun ja hallitsemattoman kaon dataluettelon kustannukset, hallinnoidun ja hallitsemattoman koodin välillä vaihtamisen kustannukset sekä hybridiympäristöjä käsittelevien kehittäjien kehitystyöt;
2. Blittable-tyypin käyttäminen interopissa voi tehokkaasti replikoida edestakaisin hallittavien ja hallitsemattomien ympäristöjen välillä ilman, että objektin sisäinen rakenne vaikuttaa siihen.
3. Käytä In/Out-ominaisuutta varmistaaksesi sopivimmat tarpeettomat monikertaiset replikaatiot ja paranna suorituskykyä ilmoittamalla, miten data on lueteltu.
4. Käytä COM Interopia toteuttaaksesi yhteensopivuuden COM-komponenttien kanssa yksinkertaisimmalla tavalla, käytä P/Invokea kutsumaan Win32 API:ta tai käytä C++-kääntäjän /CLR-kytkintä sekoittamaan hallitun ja hallitsemattoman koodin;

47. Anna etusija turvallisuusmääräyksille

1. Vältä hallitsemattoman muistin käyttöä mahdollisimman paljon, ja eristetty tallennus ei estä hallitun koodin ja luotettujen käyttäjien pääsyä.
2. Kun kokoonpanot toimivat verkossa, harkitse eristettyä tallennustilaa, ja jos tietyt algoritmit vaativat korkeampia turvallisuusoikeuksia, nämä koodit tulisi eristää erillisessä kokoonpanossa.

48. Hallitse asiaankuuluvat työkalut ja resurssit

1. Käytä NUnitia automaattisten yksikkötestien perustamiseen (integroitu VS2010:een);
2. FXCop-työkalu hankkii IL-koodin kokoonpanosta, analysoi sen heterogeenisten koodaussääntöjen ja parhaiden käytäntöjen mukaan ja lopuksi raportoi rikkomuksen.
3. ILDasm on IL-purkutyökalu, joka voi auttaa meitä saamaan ymmärrystä yksityiskohdista;
4. Shared Source CLI on toteutuslähdekoodi, joka sisältää .NET-kehysytimen ja C#-kääntäjän.




Edellinen:Service Fabric - tilallinen palvelukonsepti
Seuraava:.net/c# SynchronizationContext lisätietoja varten
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com