Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 20516|Yanıt: 0

[İpucu] C# programını optimize etmenin kırk yedi yolu

[Bağlantıyı kopyala]
Yayınlandı 15.03.2018 10:41:59 | | |

1. Erişilebilir alanları niteliklerle değiştirin

1、. .NET veri bağlama sadece veri bağlamayı destekler ve öznitelikler kullanarak veri bağlamanın avantajlarını elde edebilirsiniz.
2. Erişim alma ve ayarlama özelliğinde, çok iplik desteği eklemek için lock kullanabilirsiniz.

2. Readonly (çalışma zamanı sabiti) ve const (derleme zaman sabiti)

1. const yalnızca ilkel tipler, enumlar ve dizimler için kullanılabilirken, okunabilir herhangi bir tip olabilir;
2. CONST, derleme zamanında belirli bir sabitle değiştirilir; böylece referansta hem const hem de okunabilir değerler kullanılırsa, yalnızca okunabilir olarak değiştirildiğinde, tasarımın orijinal amacı değiştirilir; yani değiştirilen montajın yeniden derlenmesi ve yeni sabit değere yeniden referans verilmesi gerekir.
3. Const yalnızca okunabilir moddan daha verimlidir, ancak uygulama esnekliğini kaybeder.

3. IS ve AS

1. Her ikisi de çalışma zamanında tür dönüşümleridir; çünkü operatörler yalnızca referans tiplerinde kullanılabilirken, is değerler ve referans tiplerini kullanabilir;
2. Yaygın uygulama, tipi belirlemek için IS kullanmak ve ardından seçici olarak güçlü tip dönüşüm operatörü (operatör tarafından tanımlanan dönüşüm) olarak veya güçlü bir tür dönüşüm operatörü olarak kullanmaktır.

4. Koşullu Özellik yerine #if #endif条件编译

1. ConditionalAttribute yalnızca metod seviyesinde kullanılır ve türler, öznitelikler vb. gibi diğer öğeler geçersizdir. Ve #if #endif则不受此限制;
2. ConditionalAttribute, derleme koşulları için birden fazla OR (OR) işlemi ekleyebilir ve #if #endif则可以添加与(AND) [burada tamamen ayrı bir sembol olarak tanımlanabilir];
3. ConditioanlAttribute tanımı, programı daha esnek hale getirmek için ayrı bir yöntemle yerleştirilebilir.

5. ToString() yöntemini sağla

1. Kullanıcılara daha dostane bir şekilde detaylı bilgi sağlayabilir;
2. Daha esnek özelleştirme sağlamak için IFormatter.ToString() yöntemini kullanın ve IFormatProvider ile ICustomFormatter arayüzlerini eklerseniz, mesaj çıkışını özelleştirmek daha mantıklı olur.

6. Değer ile referans tipi arasındaki fark

1. Değer tipleri, uygulamalar tarafından işletilen verilerin depolanması için uygun olan polimorfizmi desteklemezken, referanslar polimorfizmi destekler; bu da uygulama davranışını tanımlamak için uygundur.
2. Değer tipleri olarak tanımlanan diziler için programın performansı önemli ölçüde iyileştirilebilir;
3. Değer tipi daha az yığın bellek parçalanması, bellek çöpü ve dolaylı erişim süresine sahiptir ve yöntemdeki geri dönüşü iç yapının dış dünyaya açılmasını önlemek için çoğaltma şeklinde yapılır.
4. Değer tipleri aşağıdaki senaryolarda kullanılır: Türlerin sorumlulukları esas olarak veri depolama için kullanılır; Genel arayüzler, bazı veri üyesi erişim öznitelikleriyle tamamen tanımlanır; Alt sınıflar asla olmaz; Hiçbir zaman polimorfik davranış olmaz.

7. Değer tipleri mümkün olduğunca sabit ve atomik türler olarak uygulanmalıdır

1. Kodumuzu yazmayı ve sürdürmeyi kolaylaştırmak;
2. Sabitleri başlatmak için üç strateji: yapıda; bitki yöntemi; Bir değişebilir yardımcı sınıf oluşturun (örneğin StringBuilder).

8. 0'ın geçerli statüsüne layık olduğundan emin olun

1. Değer türünün varsayılan durumu 0 olmalıdır;
2. Enum tipinin 0'ı geçersiz olmamalıdır; FlagsAttribute'da 0 değerinin geçerli durumda olmasını sağlamak için kullanılır;
3. İp boş olduğunda, bir ip geri verilebilir. boş ipi boş için.

9. Eşit yargıya sahip çoklu temsil ilişkileri

1. ReferenceEquals(), referansların eşit olduğunu belirler ve her ikisi de aynı nesneye atıfta bulunduğunda doğru olması gerekir.
2. Statik Equals() yöntemi, önce referans yargısı vermek için, sonra değer türünü değerlendirmek için kullanılır;
3. Referans türünün yargısı için, değer semantiği kullanılırken Equals() yöntemini yeniden yazabilirsiniz.
4. Equals() yöntemi yeniden yazılırken, GetHashCode() yöntemi de yeniden yazılmalıdır ve operater==() işlemi aynı anda sağlanmalıdır.

10. GetHashCode() yönteminin eksikliklerini anlamak

1. GetHashCode() yalnızca HashTable veya Dictionary gibi hash tabanlı ** tanımlanmış anahtarların hash değerlerine uygulanır;
2. GetHashCode() ilgili üç kurala uymalıdır: iki eşit nesne aynı hash kodunu döndürmelidir; örnek invariant olmalıdır; Hash fonksiyonu tüm tam sayılar arasında rastgele bir dağılım üretmelidir.

11. Foreach döngü ifadelerinin kullanımına öncelik verin

1. foreach derleyicinin for döngüsünün dizi sınırını kontrol etmesini ortadan kaldırabilir;
2. foreach değişkeninin dairesel değişkeni yalnızca okunabilir ve ** nesnesinin nesne tipi yanlış olduğunda istisna oluşturan açık bir dönüşüm vardır;
3. Her biri için kullanılması gereken ** şudur: halka açık GetEnumberator() yöntemi olsun; IEnumberable arayüzü açıkça uygulanmıştır. IEnumerator arayüzü uygulanır;
4. foreach kaynak yönetiminin avantajlarını getirebilir, çünkü derleyici IDisposable arayüzü belirleyebiliyorsa, optimize edilmiş try... son olarak bloklama;

12. Varsayılan alanın başlatılması, atama ifadesinden daha iyidir

1. Alan ömrü, varsayılan olarak değer tipini 0 olarak başlatır ve referans tipini null olarak başlatır.
2. Aynı nesneyi birden fazla kez başlatmak kodun yürütme verimliliğini azaltır.
3. Alanın başlatılmasının yapıcıya koyulması, istisna işleme için uygundur.

13. Statik üyeleri başlatmak için statik yapıcını kullanın

1. Statik yapıcı, herhangi bir sınıfın metod, değişkeni veya özniteliği erişilmeden önce çalıştırılır;
2. Statik alanlar da statik yapıcıdan önce çalışır ve statik yapıcı istisna yönetimine uygundur.

14. Yapımcı zinciri kullanın (in. NET 4.0 zaten bu sorunu isteğe bağlı parametrelerle çözüyor)

1. Bunu kullanarak başlatma çalışmasını başka bir yapıcıya teslim eder ve base ile temel sınıfın üreticisini çağırır;
2. Tip örneklerinin işlem dizisi şöyledir: tüm statik alanları 0'a ayarlayın; Statik alan başlatıcılarının uygulanması; temel sınıfı çalıştıran statik bir yapıcı; Mevcut tipi çalıştıran statik yapıcılar;
Tüm örnek alanlarını 0'a ayarlayın; Örnek alanı başlatıcılarını çalıştırın; Uygun temel sınıf örnek oluşturucuyu çalıştırın; Mevcut tipin örnek oluşturucusunu çalıştırın.

15. Kaynakları temizlemek için using ve try/finally ifadelerini kullanın

IDisposable arayüzün Dispose() yönteminde, GC.SuppressFinalize() kullanılarak çöp toplayıcıya nihai işlemin artık yapılmadığını bildirebilir.

16. Bellek çöplüğünü en aza indirin

1. Nesneleri bir yığın olarak tahsis etmek ve yok etmek ekstra işlemci süresi gerektirir;
2. Atanan nesne sayısını azaltma teknikleri: sıkça kullanılan yerel değişkenler alanlara terfi edilir; Belirli türleri ifade eden yaygın Singleton nesne örneklerini depolayan bir sınıf sağlar.
3. Karmaşık dizi işlemlerini gerçekleştirmek için StringBuilder kullanın.

17. Paket ve boşaltmayı en aza indirin

1. Bir türün örtük olarak System.Object türüne dönüştürülmesine dikkat edin ve değer tipi System.Object tipiyle değiştirilmemelidir;
2. Tipler yerine arayüzlerin kullanılması, yani arayüzlerden değer tiplerinin uygulanmasını ve ardından üyelerin arayüzler üzerinden çağrılmasını önlemeyi sağlar.

18. Standart Atma modunu uygulayın

1. Bellek dışı kaynakları kullanmak için bir finalizer olmalıdır, çöp toplayıcı, henüz sonlandırılmamış bellek nesnelerini tamamladıktan sonra uygulanan finalizer nesnelerini sonlandırma kuyruğuna ekler ve ardından çöp toplayıcı, bu nesneler üzerinde finalizer'ları çalıştırmak için yeni bir iş başlığı başlatır. Bu, yönetilmeyen bellek kaynaklarının serbest bırakılmamasından kaynaklanan bellek sızıntısı sorununu önleyebilir.
2. IDisposable.Dispose() yönteminin kullanımı, işin dört yönünü gerektirir: tüm yönetilmeyen kaynakların serbest bırakılması; Tüm yönetilen kaynakları serbest bırakın; Dispose()'nin çalıştırılıp uygulanmadığını göstermek için bir durum işareti ayarlayın; Nesnenin sonlandırma işlemini iptal etmek için GC.SuppressFinalize(this) numarasını çağırın;
3. Polimorfizma ihtiyacı olan tipe korumalı bir sanal yöntem Dispose() ekleyin ve türetilmiş sınıf bu yöntemi yeniden yazarak görevini serbest bırakır.
4. IDizopozable arayüz gerektiren türde, ihtiyacımız olmasa bile bir terminatör uygulamalıyız.

19. Miras türleri üzerinden arayüzleri tanımlamak ve uygulamak

1. İlgisiz tipler ortak bir arayüz uygulayabilir ve bir arayüzü uygulamak, kalıtımdan daha kolaydır;
2. Arayüz nispeten kararlıdır, bir arayüzdeki fonksiyon kümesini diğer uygulama sözleşmeleri gibi kapsüller, temel sınıf ise zamanla genişletilebilir.

20. Arayüz uygulaması ile sanal metod yeniden yazımı arasındaki ayrım

1. Temel sınıfta bir arayüz uygulanırken, türetilmiş sınıfın temel sınıf yönteminin kullanımını gizlemek için yeni kullanması gerekir;
2. Temel sınıf arayüzündeki yöntem sanal bir yöntem olarak ilan edilebilir ve ardından türetilmiş sınıfta uygulanabilir.

21. Geri çağrıları ifade etmek için emanet kullanın

1. Delege kendisi herhangi bir istisna yakalama sağlamaz, bu yüzden herhangi bir çoklu yayın delege çağrısı tüm çağrı zincirini sonlandırır.
2. Delege zincirindeki her delegasyon hedefini gösterip çağırarak, çoklu yayın delegelerinin yalnızca son delegenin çıktısını geri dönmesini önleyebilirsiniz.

22. Dış arayüzleri tanımlamak için olayları kullanın

1. Bu bir ortak olay olarak ilan edilmeli ve derleyicinin bizim için add ve renmove metodları oluşturmasına izin vermelidir.
2. Her olay işleyicisini depolamak için System.ComponentModel.EventHandlerList konteynerini kullanın ve türde çok sayıda olay bulunduğunda tüm olayların karmaşıklığını gizlemek için kullanın.

23. İç sınıf nesnelerine referansları geri göndermekten kaçının

1. Bir değer türü nesnesine erişim, nesnenin bir kopyasını oluşturduğundan, bir değer türünün tanımlanmasının öznitelikleri, tür nesnesinin içindeki durumu hiç değiştirmez;
2. Sabit tipler nesnenin durumunu değiştirmeyi önleyebilir;
3. Nesnenin iç durumuna verilen zararı en aza indirmek için bir alt kümeye erişimi sınırlayan arayüzü tanımlayın.
4. Başka bir nesneye erişimi kısıtlamak için bir wrapper nesnesi tanımlayın;
5. Müşteri kodu dahili veri öğelerini değiştirdiğinde, Gözlemci modu uygulanabilir, böylece nesne değişiklikleri doğrulayabilir veya karşılık verebilir.

24. Deklaratif programlama, zorunlu programlamadan daha iyidir

Benzer el yazısı algoritmalarda hata yapma olasılığı önlenebilir ve açık ve okunabilir kod sağlanır.

25. Türleri mümkün olduğunca serileştirilebilir şekilde uygulayın

1. Tür, bir arayüz kontrolü, pencere veya formu temsil etmez ve tip serileştirmeyi desteklemelidir;
2. Seriyeli Olmayan Öznitelik eklendiğinde, varsayılan değer IDeserializationCallback'i uygulayan OnDeserialization() yöntemiyle yüklenebilir;
3. Sürüm kontrolünde, esnek kontrol için ISerializable arayüzü kullanabilir, akıştaki verilere göre nesneleri başlatmak için serileştirme oluşturucu sağlayabilir ve uygulamada SerializationFormatter istisnalarının iznini gerekebilir.
4. Türetilmiş bir sınıf oluşturmanız gerekiyorsa, türetilmiş sınıf için bir hook yöntemi sağlamanız gerekir.

26. Sıralama ilişkilerini uygulamak için IComparable ve IComparer arayüzlerini kullanın

1. IComparable arayüzü, tipler için en doğal sıralama ilişkisini uygulamak, dört karşılaştırma operatörünü aşırı yüklemek ve belirli türleri parametre olarak kabul etmek için CompareTo() yönteminin aşırı yüklenmiş bir versiyonunu sağlamak için kullanılır.
2. IComparer, IComparable'dan farklı sıralama ilişkileri sağlamak veya türün kendisinin uygulanmadığını belirttiği sıralama ilişkilerini sağlamak için kullanılır.

27. ICloneable arayüzlerden kaçının

1. Değer türleri için ICloneable arayüzü desteklemeye gerek yoktur, sadece varsayılan atama işlemini kullanın;
2. ICloneable arayüzleri desteklemesi gereken temel sınıflar için, onlar için korunan bir çoğaltma yapıcısı oluşturulmalı ve IConeable arayüzlerden kaçınılmalıdır.

28. Zorunlu dönüşüm operatörlerinden kaçının

Dönüştürme operatörleri yerine yapıcılar kullanmak, dönüşümün daha net işlemesini sağlar; bu da dönüşüm sonrası kullanılan geçici nesneler nedeniyle garip hatalara kolayca yol açabilir.

29. Yeni modifikatörü sadece yeni sürümlerin birikmesi sorun yarattığında kullanmayı düşünün

30. CLS uyumlu montajları mümkün olduğunca uygulayın
1. Uyumlu bir montaj oluşturmak için iki kural izlenmelidir: tüm kamu ve korunan meclis üyeleri tarafından kullanılan parametreler ve dönüş değer türleri CLS ile uyumlu olmalıdır; CLS ile uyumlu olmayan herhangi bir kamu ve korunan üyenin CLS uyumlu bir alternatifi olmalıdır;
2. Arayüzü açıkça uygulayarak CLS uyumluluk tip kontrolünü atlayabilirsiniz ve CLSCompliantAttribute özel üyelerin CLS uyumluluğunu kontrol etmez.

31. Mümkün olduğunca kısa ve özlü bir yöntem uygulayın

1. JIT derleyicisi metot birimlerinde derler ve çağrılmayan metotlar JIT tarafından derlenmez;
2. Daha uzun Switch'teki Case ifadesinin kodu bir yöntemle değiştirilirse, JIT derleyicisinin tasarruf ettiği zaman çarpılır;
3. Kısa ve özlü yöntemler ile daha az yerel değişken seçmek, optimize edilmiş kayıt kullanımı sağlar;
4. Metodda ne kadar az kontrol dalı olursa, JIT derleyicisinin değişkenleri kayıtlara yerleştirmesi o kadar kolay olur.

32. Mümkün olduğunca küçük boyut ve yüksek bütünlüklü montajlar gerçekleştirin

1. Tüm genel sınıfları ve ortak temel sınıfları bazı montajlara koymak, halka açık sınıflar için fonksiyon sağlayan araç sınıflarını aynı montaja koymak, ilgili genel arayüzleri kendi montajlarına paketlemek ve son olarak uygulamada yatay konumda bulunan sınıfları işlemek;
2. Prensipte iki tür bileşen oluşturulmalıdır: biri belirli bir fonksiyona sahip küçük ve toplu bir montaj, diğeri ise ortak işlevlere sahip büyük ve geniş bir montajdır.

33. Türlerin görünürlüğünü sınırlamak

1. Tiplerin fonksiyonlarını ortaya çıkarmak için arayüzler, derleme dışındaki erişilebilirliklerini sınırlamadan dahili sınıflar oluşturmamızı kolaylaştırabilir;
2. Dış dünyaya maruz kalan kamusal tipler ne kadar az olursa, gelecekteki genişleme ve değişiklik uygulamaları için o kadar fazla seçeneğiniz olur.

34. Büyük granüel bir Web API'si oluşturun

Bu, makineler arasındaki işlem sıklığını ve yükünü en aza indirerek, sunucuya büyük işlemler ve ince taneli yürütmeler getirir.

35. Yeniden yazma olay işlemcilerinden daha iyidir

1. Bir olay işlemcisi istisna yaparsa, olay zincirindeki diğer işlemciler çağrılmaz, ancak bu yeniden yazılmış sanal yöntemde gerçekleşmez.
2. Yeniden yazma, tüm istek listesini yinelemesi gereken ilişkilendirilmiş olay işlemcilerinden çok daha verimlidir; bu da daha fazla CPU süresi alır.
3. Olaylar çalışma zamanında daha esneklikle yanıtlanabilir ve aynı olayla birden fazla yanıt ilişkilendirilebilir.
4. Ortak kural, türemiş bir olayla ilgilenmektir ve yeniden yazma yöntemi daha iyidir.

36. Adil kullanım. .NET çalışma zamanı tanılaması

1. System.Diagnostics.Debug\Trace\EventLog, programın çalışma zamanına tanı bilgisi eklemesi için gereken tüm araçları sağlar ve uygulama, EventLog bileşeni sağladığında sistem olay kaydına yazabilir;
2. Son olarak, kendi tanı kütüphanenizi yazmayın, .NET FCL zaten ihtiyacımız olan çekirdek kütüphaneye sahip.

37. Standart yapılandırma mekanizmalarını kullanın

1、. .NET çerçevesinin System.Windows.Application sınıfı, ortak bir yapılandırma yolu oluşturmak için özellikleri tanımlar;
2. Application.LocalAppDataPath ve Application.userDataPath, yerel veri dizininin ve kullanıcı verilerinin yol adlarını oluşturur;
3. ProgramFiles ve Windows sistem dizinlerine veri yazmayın, bu konumlar daha yüksek güvenlik izinleri gerektirir, kullanıcıların yazma iznine sahip olmasını beklemeyin.

38. Veri bağlamayı özelleştirin ve destekleyin

1. BindingMananger ve CurrencyManager'ın iki nesnesi, kontrol ile veri kaynağı arasındaki veri transferini gerçekleştirir;
2. Veri bağlamanın avantajları: veri bağlama kullanmak, kendi kodunuzu yazmaktan çok daha basittir; Metin veri öğeleri dışındaki kapsamlar için kullanılmalıdır - diğer görüntüleme özellikleri de sınırlandırılabilir; Windowos Forms veri bağlamaları için, kontrolle ilgili veri kaynaklarının çoklu kontrol senkronizasyonunu yönetebilme yeteneği;
3. Nesne gerekli öznitelikleri desteklemediğinde, mevcut nesneyi engelleyip ardından istenen nesneyi ekleyerek veri bağlamayı destekleyebilirsiniz.

39. Kullan. .NET doğrulaması

1. Geçerliliği doğrulamak için ASP.NET beş kontrol vardır ve CustomValidator kullanarak kendi kimlik doğrulama cihazınızı eklemek için yeni bir sınıf oluşturabilirsiniz.
2. Windows doğrulaması, bir olay işleyicisi yazmak için bir alt System.Windows.Forms.Control.Validating gerektirir.

40. İhtiyaçlara göre uygun ** seçeneği seçin

1. Dizinin iki bariz kusuru vardır: dinamik olarak boyutlandırılamaz; Boyut değiştirmek zaman alıcıdır;
2. ArrayList, tek boyutlu dizilerle bağlı listelerin özelliklerini karıştırır, Queue ve Stack, Array tabanlı özel dizilerdir;
3. Program öğe ekleme ve silme konusunda daha esnek olduğunda, daha sağlam tipler oluşturabilir ve ** simüle eden bir sınıf oluştururken, bunun için indeksleyiciler ve IEnumberable arayüzler uygulamalıdır.

41. DataSet, özel yapıdan daha iyidir

1. Veri Setlerinin iki dezavantajı vardır: XML serileştirme mekanizması ile non-.NET kodu kullanan Veri Setleri arasındaki etkileşim çok iyi değildir; DataSet çok yönlü bir konteynerdir;
2. Güçlü Veri Setleri türleri daha fazla tasarım kuralını bozur ve geliştirme verimliliği, kendi başlarına yazdığı daha zarif tasarımlardan çok daha yüksektir.

42. Yansıtmayı basitleştirmek için özellikleri kullanın

Geliştiricileri dinamik olarak kullanılabilir türler, yöntemler ve nitelikler bildirmeye zorlayan özellik sınıfları tasarlayıp uygulayarak, uygulama çalışma zamanı hatalarını azaltabilir ve yazılım kullanıcı memnuniyetini artırabilirsiniz.

43. Refleksleri aşırı kullanmaktan kaçının

1. Invoke üyelerinin kullandığı parametreler ve dönüş değerleri System.Object'tir; bu örnek türleri çalışma zamanında dönüştürür, ancak sorun olasılığı artmıştır.
2. Arayüz daha net ve daha sürdürülebilir bir sistem elde etmemizi sağlar ve yansıtma çok güçlü bir geç bağlama mekanizmasıdır. .NET framework, Windows kontrolleri ve web kontrolleri için veri bağlama uygulamak için bunu kullanır.

44. Uygulama için özel istisna sınıfları oluşturun

1. Farklı istisna sınıflarının gerekli olmasının tek nedeni, kullanıcıların yakalama işlemcileri yazarken farklı hatalara kolayca farklı yaklaşımlar gösterebilmelerini sağlamaktır;
2. Farklı onarım davranışları olduğunda, farklı istisna sınıfları oluşturmalıyız; istisna taban sınıfı tarafından desteklenen tüm yapıcılar sağlayarak, uygulama için tam işlevsel bir istisna sınıfı oluşturabilir ve InnerException niteliğini kullanarak alt seviyeli hata koşullarından oluşan tüm hata bilgilerini kaydedebiliriz.

45. Anormal güvenlik garantilerine öncelik verin

1. Güçlü istisna garantisi, istisnadan kurtarma ile basitleştirilmiş istisna yönetimi arasında en iyi dengeyi sağlar ve operasyon istisna nedeniyle kesintiye uğradığında programın durumu değişmez.
2. Değiştirilecek verilerin savunma amaçlı kopyalanmasını yapın, bu verilerin savunma kopyasını değiştirin; ortadaki işlem istisna yaratabilir ve geçici kopya ile orijinal nesne değiş tokuş edilir;
3. Delegelere bağlı olan Terminatörler, Dispose() yöntemleri ve hedef yöntemler, hiçbir koşulda istisna yapmamalarından emin olmalıdır.

46. Birlikte çalışabilirliği en aza indirin

1. Birlikte çalışabilirliğin üç maliyeti vardır: yönetilen ve yönetilmeyen yığınlar arasında veri sayımı maliyeti, yönetilen kod ile yönetilmeyen kod arasında geçiş maliyeti ve hibrit ortamlarla ilgilenen geliştiricilerin geliştirme çalışmaları;
2. Etkileşimli ortamda blittable tipinin kullanılması, yönetilen ve yönetilmeyen ortamlar arasında etkili bir şekilde çoğaltma sağlayabilir ve nesnenin iç yapısından etkilenmez.
3. En uygun gereksiz çoklu çoğaltmaları sağlamak için Giriş/Çıkış özelliğini kullanın ve verilerin nasıl sayıldığını bildirerek performansı artırın.
4. COM bileşenleriyle en basit şekilde birlikte çalışabilirliği sağlamak için COM Interop kullanın, Win32 API'sini çağırmak için P/Invoke kullanın veya yönetilen ve yönetilmeyen kodu karıştırmak için C++ derleyicisinin /CLR anahtarını kullanın;

47. Güvenlik kodlarına öncelik verin

1. Yönetilmeyen belleğe mümkün olduğunca erişmekten kaçının ve izole depolama yönetilen kod ve güvenilir kullanıcıların erişimini engelleyemez.
2. Montajlar webde çalışırken, izole depolama kullanmayı düşünün ve bazı algoritmalar daha yüksek güvenlik izinleri gerektirdiğinde, bu kodlar ayrı bir montajda izole edilmelidir.

48. İlgili araçlar ve kaynakları ustalıkla kullan

1. Otomatik birim testleri oluşturmak için NUnit kullanın (VS2010'a entegre edilmiş);
2. FXCop aracı, IL kodunu montajda elde eder, heterojen kodlama kuralları ve en iyi uygulamalarla karşılaştırır ve son olarak ihlali bildirir.
3. ILDasm, detaylara dair içgörü kazanmamıza yardımcı olabilecek bir IL sökme aracıdır;
4. Paylaşılan Kaynak CLI, .NET çerçeve çekirdeği ve C# derleyicisini içeren bir uygulama kaynak kodudur.




Önceki:Hizmet Yapısı - Durumlu Hizmet konsepti
Önümüzdeki:.net/c# SynchronizationContext detaylar için
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com