Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 20516|Atbildi: 0

[Padomi] Četrdesmit septiņi veidi, kā optimizēt C# programmu

[Kopēt saiti]
Publicēts 15.03.2018 10:41:59 | | |

1. Aizstājiet pieejamos laukus ar atribūtiem

1、. .NET datu saistīšana atbalsta tikai datu saistīšanu, un datu saistīšanas priekšrocības var izmantot, izmantojot atribūtus.
2. Iegūstot un iestatot piekļuvi īpašumam, varat izmantot slēdzeni, lai pievienotu vairāku pavedienu atbalstu.

2. Tikai lasāms (izpildlaika konstante) un const (kompilācijas laika konstante)

1. Const var izmantot tikai primitīviem tipiem, uzskaitījumiem un virknēm, bet tikai lasāms var būt jebkurš tips;
2. Const tiks aizstāts ar noteiktu konstanti kompilācijas laikā, tādēļ, ja atsaucē tiek izmantotas gan konstantes, gan tikai lasāmās vērtības, izmaiņas uz lasāmu mainīs dizaina sākotnējo nolūku, kas ir nepieciešamība pārkompilēt mainīto montāžu, lai atkārtoti atsauktos uz jauno konstanto vērtību.
3. Const ir efektīvāks nekā tikai lasāms, bet zaudē pielietojuma elastību.

3. IR un AS

1. Abi ir tipu konvertēšana izpildlaikā, jo operatorus var izmantot tikai atsauces tipos, bet tas var izmantot vērtības un atsauces tipus;
2. Parastā prakse ir izmantot IS, lai noteiktu tipu, un pēc tam izvēlēties selektīvi izmantot kā vai spēcīgu tipa pārveidošanas operatoru (pārveidotājs).

4. ConditionalAttribute vietā #if #endif条件编译

1. ConditionalAttribute tiek izmantots tikai metodes līmenī, un citi vienumi, piemēram, tipi, atribūti utt., nav derīgi. Un #if #endif则不受此限制;
2. ConditionalAttribute var pievienot vairākas OR (OR) operācijas kompilācijas nosacījumiem, un #if #endif则可以添加与(AND) [šeit var pilnībā definēt kā citu atsevišķu simbolu];
3. ConditioanlAttribute definīciju var ievietot atsevišķā metodē, lai padarītu programmu elastīgāku.

5. Norādiet ToString() metodi

1. Tas var sniegt detalizētu informāciju lietotājiem draudzīgākā veidā;
2. Izmantojiet IFormatter.ToString() metodi, lai nodrošinātu elastīgāku pielāgošanu, un, ja pievienojat IFormatProvider un ICustomFormatter saskarnes, būs lietderīgāk pielāgot ziņojuma izvadi.

6. Atšķirība starp vērtību un atsauces veidu

1. Vērtību tipi neatbalsta polimorfismu, kas ir piemērots lietojumprogrammu datu glabāšanai, bet atsauces atbalsta polimorfismu, kas ir piemērots lietojumprogrammu uzvedības definēšanai.
2. Masīviem, kas definēti kā vērtību tipi, programmas veiktspēju var ievērojami uzlabot;
3. Vērtības tipam ir mazāka kaudzes atmiņas sadrumstalotība, atmiņas atkritumi un netiešas piekļuves laiks, un tā atgriešanās metodē tiek veikta replikācijas veidā, lai izvairītos no iekšējās struktūras pakļaušanas ārpasaulei.
4. Vērtību veidi tiek izmantoti šādos scenārijos: Tipu pienākumi galvenokārt tiek izmantoti datu glabāšanai; Publiskās saskarnes ir pilnībā definētas ar dažiem datu dalībnieku piekļuves atribūtiem; Nekad nav apakšklases; Nekad nav polimorfas uzvedības.

7. Vērtību veidi jāievieš pēc iespējas nemainīgāki un atomu tipi

1. Padariet mūsu kodu vieglāk rakstāmu un uzturamu;
2. Trīs konstantu inicializēšanas stratēģijas: būvniecībā; augu metode; Izveidojiet maināmu palīgu klasi (piemēram, StringBuilder).

8. Pārliecinieties, ka 0 ir derīga statusa cienīgs

1. Vērtības tipa noklusējuma stāvoklim jābūt 0;
2. Uzskaitījuma tipa 0 nedrīkst būt nederīgs; Atribūtā FlagsIr jānodrošina, ka vērtība 0 ir derīga stāvoklī;
3. Kad virkne ir tukša, virkne var tikt atgriezta. tukša virkne tukšai.

9. Vairākas vienāda sprieduma pārstāvības attiecības

1. ReferenceEquals() nosaka, ka atsauces ir vienādas, un tai jābūt patiesai, ja abas attiecas uz vienu un to pašu objektu.
2. Statiskā Equals() metode tiek izmantota, lai vispirms izdarītu atsauces spriedumu un pēc tam spriestu par vērtības veidu;
3. Lai spriestu par atsauces tipu, varat izmantot pārrakstīšanas metodi Equals(), izmantojot vērtību semantiku.
4. Pārrakstot Equals() metodi, jāpārraksta arī GetHashCode() metode, un vienlaikus jānodrošina operācija operators==().

10. Izprotiet GetHashCode() metodes trūkumus

1. GetHashCode() tiek lietots tikai uz jaucējkodu balstītu ** definētu atslēgu, piemēram, HashTable vai Dictionary, jaucējvērtībām;
2. GetHashCode() jāievēro attiecīgie trīs noteikumi: diviem vienādiem objektiem jāatgriež viens un tas pats jaucējkods; vajadzētu būt gadījuma invariantam; Jaucējfunkcijai jārada nejaušs sadalījums pa visiem veseliem skaitļiem.

11. Dodiet priekšroku foreach cilpas priekšrakstu izmantošanai

1. foreach var novērst kompilatora pārbaudi par cilpas for masīva robežu;
2. Foreach apļveida mainīgais ir tikai lasāms, un ir skaidra transformācija, kas rada izņēmumu, ja objekta ** objekta tips ir nepareizs;
3. **, kas nepieciešams, lai izmantotu foreach, ir: jābūt publiskai GetEnumberator() metodei; IE numurējamais interfeiss ir skaidri ieviests. Ir ieviests IEnumerator interfeiss;
4. foreach var sniegt resursu pārvaldības priekšrocības, jo, ja kompilators var noteikt IDisposable interfeisu, tas var izmantot optimizēto mēģinājumu... visbeidzot bloķēt;

12. Noklusējuma lauka inicializācija ir labāka nekā piešķiršanas paziņojums

1. Lauka dzīve pēc noklusējuma inicializēs vērtības tipu uz 0 un atsauces tipu uz null.
2. Viena un tā paša objekta inicializēšana vairākas reizes samazinās koda izpildes efektivitāti.
3. Lauka inicializācijas ievietošana konstruktorā veicina izņēmumu apstrādi.

13. Izmantojiet statisko konstruktoru, lai inicializētu statiskos elementus

1. Statiskais konstruktors tiks izpildīts pirms piekļuves jebkurai klases metodei, mainīgajam vai atribūtam;
2. Statiskie lauki darbosies arī pirms statiskā konstruktora, un statiskais konstruktors veicina izņēmumu apstrādi.

14. Izmantojiet konstruktora ķēdi (in. NET 4.0 jau atrisina šo problēmu ar izvēles parametriem)

1. Izmantojiet to, lai nodotu inicializācijas darbu citam konstruktoram, un izmantojiet bāzi, lai izsauktu bāzes klases konstruktoru;
2. Tipa instanču operāciju secība ir: iestatiet visus statiskos laukus uz 0; Statisko lauku inicializatoru izpilde; statisks konstruktors, kas izpilda bāzes klasi; Statiskie konstruktori, kas izpilda pašreizējo tipu;
Iestatiet visus instances laukus uz 0; Izpildīt instances lauku inicializatorus; Izpildiet atbilstošo bāzes klases instances konstruktoru; Izpildiet pašreizējā tipa instances konstruktoru.

15. Izmantojiet paziņojumus un izmēģiniet / beidziet, lai attīrītu resursus

IDisposable saskarnes metodē Dispose() var izmantot GC.SuppressFinalize(), lai paziņotu atkritumu savācējam, ka galīgā darbība vairs netiek veikta.

16. Samaziniet atmiņas atkritumus

1. Tas prasa papildu procesora laiku, lai piešķirtu un iznīcinātu objektus kaudzē;
2. Piešķirto objektu skaita samazināšanas paņēmieni: bieži izmantotie lokālie mainīgie tiek paaugstināti uz laukiem; Nodrošina klasi, kurā tiek glabāti bieži sastopami Singleton objektu gadījumi, kas izsaka noteiktus tipus.
3. Izmantojiet StringBuilder, lai veiktu sarežģītas virknes operācijas.

17. Samaziniet iepakošanu un izsaiņošanu

1. Pievērsiet uzmanību netiešai tipa konvertēšanai uz System.Object, un vērtības tipu nedrīkst aizstāt ar System.Object tipu;
2. Izmantojot saskarnes tipu vietā, var izvairīties no boksa, tas ir, vērtību tipu ieviešanas no saskarnēm un pēc tam dalībnieku izsaukšanas caur saskarnēm.

18. Ieviesiet standarta iznīcināšanas režīmu

1. Lai izmantotu resursus, kas nav atmiņas resursi, tam jābūt pabeigtājam, atkritumu savācējs pievienos ieviestos pabeigtāja objektus izbeigšanas rindai pēc atmiņas objektu pabeigšanas, kas tos nav pārtraukuši, un pēc tam atkritumu savācējs sāks jaunu pavedienu, lai palaistu pabeigtājus šajos objektos. Tas var izvairīties no atmiņas noplūdes problēmas, ko izraisa nepārvaldītu atmiņas resursu neatbrīvošana.
2. IDisposable.Dispose() metodes izmantošanai ir nepieciešami četri darba aspekti: visu nepārvaldīto resursu atbrīvošana; Atbrīvojiet visus pārvaldītos resursus; Iestatiet statusa marķieri, lai norādītu, vai Dispose() ir izpildīts; Izsauciet GC.SuppressFinalize(this), lai atceltu objekta izbeigšanas operāciju;
3. Pievienojiet aizsargātu virtuālo metodi Dispose() tipam, kuram nepieciešams polimorfisms, un atvasinātā klase atbrīvo savu uzdevumu, pārrakstot šo metodi.
4. Tipā, kam nepieciešams IDisoposable interfeiss, mums vajadzētu ieviest terminatoru pat tad, ja mums tas nav vajadzīgs.

19. Definējiet un ieviesiet saskarnes pār mantojuma veidiem

1. Nesaistītie tipi var kopīgi īstenot kopīgu saskarni, un ir vieglāk ieviest saskarni nekā mantojumu;
2. Interfeiss ir salīdzinoši stabils, tas ietver funkciju kopumu saskarnē kā cita veida ieviešanas līgumus, bet bāzes klasi var pagarināt laika gaitā.

20. Atšķirt saskarnes ieviešanu un virtuālo metožu pārrakstīšanu

1. Ieviešot saskarni bāzes klasē, atvasinātajai klasei ir jāizmanto jauns, lai slēptu bāzes klases metodes izmantošanu;
2. Bāzes klases saskarnes metodi var deklarēt kā virtuālu metodi un pēc tam ieviest atvasinātajā klasē.

21. Izmantojiet uzticēšanu, lai izteiktu atzvanīšanu

1. Pārstāvis pats par sevi nenodrošina nekādu izņēmumu tveršanu, tāpēc jebkurš multicast pārstāvja zvans izbeigs visu zvanu ķēdi.
2. Parādot un izsaucot katru deleģēšanas mērķi pārstāvju ķēdē, varat izvairīties no multicast delegātu atgriešanas tikai pēdējā pārstāvja izvades.

22. Izmantojiet notikumus, lai definētu ārējās saskarnes

1. Tas ir jāpasludina kā kopīgs notikums un jāļauj kompilatoram izveidot mums pievienot un pārvietot metodes.
2. Izmantojiet System.ComponentModel.EventHandlerList konteineru, lai saglabātu katru notikumu apdarinātāju, un izmantojiet to, lai paslēptu visu notikumu sarežģītību, ja tips satur lielu skaitu notikumu.

23. Izvairieties no atsauču atgriešanas uz iekšējiem klases objektiem

1. Tā kā piekļuve vērtības tipa objektam radīs objekta kopiju, vērtības tipa definēšanas atribūti vispār nemainīs stāvokli tipa objektā;
2. Pastāvīgi tipi var izvairīties no objekta stāvokļa maiņas;
3. Definējiet saskarni, lai ierobežotu piekļuvi apakškopai, lai samazinātu objekta iekšējā stāvokļa bojājumus.
4. Definējiet iesaiņojuma objektu, lai ierobežotu piekļuvi citam objektam;
5. Kad klienta kods maina iekšējos datu elementus, var ieviest novērotāja režīmu, lai objekts varētu pārbaudīt vai atbilst izmaiņām.

24. Deklaratīvā programmēšana ir labāka par obligāto programmēšanu

Var izvairīties no kļūdu iespējamības vairākos līdzīgos ar roku rakstītos algoritmos, un tiek nodrošināts skaidrs un lasāms kods.

25. Ieviesiet pēc iespējas serializējamākus veidus

1. Tips neapzīmē lietotāja interfeisa vadīklu, logu vai formu, un tipam ir jāatbalsta serializācija;
2. Pievienojot NonSerializedAttribute deserializēto atribūtu, noklusējuma vērtību var ielādēt, izmantojot OnDeserialization() metodi, kas īsteno IDeserializationCallback;
3. Versiju kontrolē varat izmantot ISerializable interfeisu elastīgai vadībai un nodrošināt serializācijas konstruktoru, lai inicializētu objektus atbilstoši plūsmas datiem, kā arī nepieciešamība saņemt SerializationFormatter izņēmumu atļauju.
4. Ja jums ir nepieciešams izveidot atvasinātu klasi, jums ir jānodrošina āķa metode atvasinātajai klasei.

26. Izmantojiet IComparable un IComparer saskarnes, lai ieviestu šķirošanas attiecības

1. IComparable interfeiss tiek izmantots, lai ieviestu dabiskāko tipu šķirošanas attiecību, pārslogojot četrus salīdzināšanas operatorus un nodrošinot pārslogotu CompareTo() metodes versiju, lai pieņemtu konkrētus tipus kā parametrus.
2. IComparer tiek izmantots, lai nodrošinātu šķirošanas attiecības, kas atšķiras no IComparable, vai lai nodrošinātu mums šķirošanas attiecības, kuras pats tips saka, ka nav ieviestas.

27. Izvairieties no ICloneable saskarnēm

1. Vērtību tipiem nav nepieciešams atbalstīt ICloneable interfeisu, vienkārši izmantojiet noklusējuma piešķiršanas operāciju;
2. Bāzes klasēm, kurām var būt nepieciešams atbalstīt ICloneable saskarnes, tām jāizveido aizsargāts replicēšanas konstruktors un jāizvairās no IConeable saskarnēm.

28. Izvairieties no piespiedu pārveidošanas operatoriem

Konstruktoru izmantošana konvertēšanas operatoru vietā var padarīt konvertēšanas darbu skaidrāku, kas var viegli izraisīt dažas dīvainas kļūdas, kas saistītas ar pagaidu objektiem, kas tiek izmantoti pēc konvertēšanas.

29. Apsveriet iespēju izmantot jauno modifikatoru tikai tad, ja jaunu versiju uzkrāšanās rada problēmas

30. Ieviesiet ar CLS saderīgus komplektus, cik vien iespējams
1. Lai izveidotu saderīgu montāžu, jāievēro divi noteikumi: parametriem un atgrieztās vērtības veidiem, ko izmanto visi publiskie un aizsargātie montāžas dalībnieki, jābūt saderīgiem ar CLS; Jebkuram publiskam un aizsargātam dalībniekam, kas nav saderīgs ar CLS, ir jābūt ar CLS saderīgai alternatīvai;
2. Jūs varat apiet CLS saderības tipa pārbaudi, skaidri ieviešot saskarni, un CLSCompliantAttribute nepārbaudīs privāto dalībnieku CLS saderību.

31. Pēc iespējas vairāk īstenojiet īsu un kodolīgu metodi

1. KIG kompilators apkopo metožu vienībās, un metodes, kas netiek izsauktas, KIG nekompilēs;
2. Ja garākā Switch lietas izklāsta kods tiek aizstāts ar vienu metodi, KIG kompilatora ietaupītais laiks tiks reizināts;
3. Īsas un kodolīgas metodes un mazāk vietējo mainīgo izvēli var iegūt optimizētu reģistra izmantošanu;
4. Jo mazāk kontroles filiāļu metodē, jo vieglāk KIG kompilatoram ir ievietot mainīgos lielumus reģistros.

32. Cik vien iespējams, realizējiet maza izmēra un augstas saliedētas montāžas

1. Ievietojiet visas publiskās klases un kopējās bāzes klases dažās montāžās, ievietojiet rīku klases, kas nodrošina funkcijas publiskajām klasēm, iepakojiet attiecīgās publiskās saskarnes savās montāžās un visbeidzot apstrādājiet klases, kas atrodas visā horizontālajā pozīcijā lietojumprogrammā;
2. Principā jāizveido divu veidu komponenti: viens ir mazs un apkopots mezgls ar konkrētu funkciju, bet otrs ir liels un plašs komplekts ar kopīgām funkcijām.

33. Ierobežojiet veidu redzamību

1. Izmantojot saskarnes, lai atklātu tipu funkcijas, mums var būt vieglāk izveidot iekšējās klases, neierobežojot to pieejamību ārpus montāžas;
2. Jo mazāk publisko tipu ir pakļauti ārpasaulei, jo vairāk iespēju jums ir turpmākai paplašināšanai un izmaiņu ieviešanai.

34. Izveidojiet lielu detalizētu tīmekļa API

Tas samazina darījumu biežumu un slodzi starp mašīnām, serverim ievietojot lielas operācijas un smalkgraudainas izpildes.

35. Pārrakstīšana ir labāka nekā notikumu procesori

1. Ja notikumu procesors izmet izņēmumu, citi notikumu ķēdes procesori netiks izsaukti, bet tas nenotiks ar pārrakstīto virtuālo metodi.
2. Pārrakstīšana ir daudz efektīvāka nekā asociatīvie notikumu procesori, kuriem jāatkārto viss pieprasījumu saraksts, kas aizņem vairāk CPU laika.
3. Uz notikumiem var atbildēt izpildes laikā, ar lielāku elastību, un vairākas atbildes var būt saistītas ar vienu un to pašu notikumu.
4. Parastais noteikums ir rīkoties ar atvasinātu notikumu, un pārrakstīšanas metode ir labāka.

36. Godīga izmantošana. .NET izpildlaika diagnostika

1. System.Diagnostics.Debug \ Trace \ EventLog nodrošina visus nepieciešamos rīkus, lai programma pievienotu diagnostikas informāciju izpildlaikam, un lietojumprogramma var rakstīt sistēmas notikumu žurnālā, kad EventLog nodrošina sastāvdaļu;
2. Visbeidzot, nerakstiet savu diagnostikas bibliotēku, .NET FCL jau ir nepieciešamā pamatbibliotēka.

37. Izmantojiet standarta konfigurācijas mehānismus

1、. .NET framework klase System.Windows.Application definē īpašības, lai izveidotu kopīgu konfigurācijas ceļu;
2. Application.LocalAppDataPath un Application.userDataPath ģenerēs vietējā datu direktorija un lietotāja datu ceļu nosaukumus;
3. Nerakstiet datus ProgramFiles un Windows sistēmas direktorijās, šajās vietās ir nepieciešamas augstākas drošības atļaujas, negaidiet, ka lietotājiem būs rakstīšanas atļaujas.

38. Datu saistīšanas pielāgošana un atbalstīšana

1. Divi BindingMananger un CurrencyManager objekti realizē datu pārsūtīšanu starp kontroli un datu avotu;
2. Datu saistīšanas priekšrocības: datu saistīšana ir daudz vienkāršāka nekā sava koda rakstīšana; Tas jāizmanto tvērumiem, kas nav teksta datu vienumi - var būt saistīti arī citi attēlojuma rekvizīti; Windowos Forms datu saistībām iespēja apstrādāt ar pārbaudi saistītu datu avotu vairāku vadīklu sinhronizāciju;
3. Ja objekts neatbalsta nepieciešamos atribūtus, varat atbalstīt datu saistīšanu, bloķējot pašreizējo objektu un pēc tam pievienojot vajadzīgo objektu.

39. Lietošana. .NET validācija

1. ASP.NET ir piecas vadīklas, lai pārbaudītu derīgumu, un jūs varat izmantot CustomValidator, lai iegūtu jaunu klasi un pievienotu savu autentifikatoru.
2. Windows validācijai ir nepieciešama apakšsistēma.Windows.Forms.Control.Validating notikumu apdarinātāja rakstīšanai.

40. Izvēlieties atbilstošo ** atbilstoši vajadzībām

1. Masīvam ir divi acīmredzami defekti: to nevar dinamiski mainīt; Izmēru maiņa ir laikietilpīga;
2. ArrayList sajauc viendimensiju masīvu un saistīto sarakstu īpašības, rinda un kaudze ir īpaši masīvi, kuru pamatā ir masīvs;
3. Ja programma ir elastīgāka, lai pievienotu un dzēstu vienumus, tā var izveidot spēcīgākus tipus, un, veidojot klasi, kas simulē **, tai jāievieš indeksētāji un IE numurējamas saskarnes.

41. DataSet ir labāka par pielāgotu struktūru

1. DataSets ir divi trūkumi: mijiedarbība starp DataSets, izmantojot XML serializācijas mehānismu un non-.NET kodu, nav ļoti laba; DataSet ir ļoti daudzpusīgs konteiners;
2. Spēcīgi datu kopu veidi pārkāpj vairāk dizaina noteikumu, un to izstrādes efektivitāte ir daudz augstāka nekā pašu rakstīto elegantāko dizainu efektivitāte.

42. Izmantojiet īpašības, lai vienkāršotu pārdomas

Izstrādājot un ieviešot līdzekļu klases, kas liek izstrādātājiem deklarēt dinamiski izmantojamus tipus, metodes un atribūtus, varat samazināt lietojumprogrammu izpildlaika kļūdas un uzlabot programmatūras lietotāju apmierinātību.

43. Izvairieties no refleksu pārmērīgas izmantošanas

1. Invoke dalībnieku izmantotie parametri un atgrieztās vērtības ir System.Object, kas pārvērš tipus izpildlaikā, bet problēmu iespējamība ir kļuvusi iespējamāka.
2. Interfeiss ļauj mums iegūt skaidrāku un uzturamāku sistēmu, un atspoguļojums ir ļoti spēcīgs vēlu saistīšanas mehānisms. .NET Framework to izmanto, lai ieviestu datu saistīšanu Windows vadīklām un tīmekļa vadīklām.

44. Izveidojiet īpašas izņēmuma klases lietojumprogrammai

1. Vienīgais iemesls, kāpēc ir vajadzīgas dažādas izņēmuma klases, ir ļaut lietotājiem viegli izmantot dažādas pieejas dažādām kļūdām, rakstot nozvejas procesorus;
2. Ja var būt dažādas labošanas darbības, mums jāizveido dažādas izņēmuma klases, nodrošinot visus izņēmuma pamatklases atbalstītos konstruktorus, mēs varam izveidot pilnībā funkcionējošu izņēmuma klasi lietojumprogrammai un izmantot atribūtu InnerException, lai saglabātu visu zemāka līmeņa kļūdu apstākļu ģenerēto kļūdu informāciju.

45. Piešķirt prioritāti neparastām drošības garantijām

1. Spēcīga izņēmuma garantija nodrošina vislabāko līdzsvaru starp atgūšanu no izņēmuma un vienkāršotu izņēmumu apstrādi, un programmas stāvoklis paliek nemainīgs, ja darbība tiek pārtraukta izņēmuma dēļ.
2. Veiciet modificējamo datu aizsardzības kopēšanu, modificējiet šo datu aizsardzības kopiju, operācija vidū var izraisīt izņēmumu, un pagaidu kopija un oriģinālais objekts tiks apmainīti;
3. Terminatoriem, Dispose() metodēm un mērķa metodēm, kas saistītas ar delegātiem, jānodrošina, ka tie nekādā gadījumā nerada izņēmumus.

46. Samaziniet sadarbspēju

1. Sadarbspējas izmaksas ir trīs: datu uzskaitīšanas izmaksas starp pārvaldītām un nepārvaldītām kaudzēm, pārslēgšanās izmaksas starp pārvaldīto kodu un nepārvaldīto kodu un izstrādātāju izstrādes darbs, kas nodarbojas ar hibrīdvidēm;
2. Izmantojot blittable tipu interoperācijā, var efektīvi replicēt uz priekšu un atpakaļ starp pārvaldīto un nepārvaldīto vidi, neietekmējot objekta iekšējo struktūru.
3. Izmantojiet funkciju In/Out, lai nodrošinātu vispiemērotākās nevajadzīgās vairākkārtējas replikācijas un uzlabotu veiktspēju, deklarējot datu uzskaiti.
4. Izmantojiet COM Interop, lai vienkāršākajā veidā īstenotu sadarbspēju ar COM komponentiem, izmantojiet P / Invoke, lai izsauktu Win32 API, vai izmantojiet C ++ kompilatora / CLR slēdzi, lai sajauktu pārvaldīto un nepārvaldīto kodu;

47. Dodiet prioritāti drošības kodeksiem

1. Cik vien iespējams, izvairieties no piekļuves nepārvaldītai atmiņai, un izolēta krātuve nevar novērst piekļuvi pārvaldītajam kodam un uzticamiem lietotājiem.
2. Kad montāžas darbojas tīmeklī, apsveriet iespēju izmantot izolētu krātuvi, un, ja noteiktiem algoritmiem ir nepieciešamas augstākas drošības atļaujas, šie kodi ir jāizolē atsevišķā montāžā.

48. Apgūstiet attiecīgos rīkus un resursus

1. Izmantojiet NUnit, lai izveidotu automātiskus vienību testus (integrēti VS2010);
2. FXCop rīks iegūs IL kodu montāžā, analizēs to pret neviendabīgiem kodēšanas noteikumiem un labāko praksi un visbeidzot ziņos par pārkāpumu.
3. ILDasm ir IL demontāžas rīks, kas var palīdzēt mums gūt ieskatu detaļās;
4. Koplietojamā avota CLI ir ieviešanas avota kods, kas satur .NET framework kodolu un C# kompilatoru.




Iepriekšējo:Service Fabric - Stateful Service koncepcija
Nākamo:.net/c# SynchronizationContext detalizētai informācijai
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com