Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kısıtlanmış yürütme bölgesi (CER), güvenilir yönetilen kod yazmaya yönelik bir mekanizmanın parçasıdır. CER, ortak dil çalışma zamanının (CLR) alandaki kodun tamamen yürütülmesini engelleyecek bant dışı özel durumlar oluşturmasının kısıtlandığı bir alan tanımlar. Bu bölge içinde kullanıcı kodu, bant dışı özel durumların ortaya çıkmasıyla sonuçlanan kodun yürütülmesinden kısıtlanır.
PrepareConstrainedRegions yöntemi, bir try bloğunun hemen önünde olmalı ve catch, finally ve fault bloklarını kısıtlanmış yürütme bölgeleri olarak işaretlemelidir. Kısıtlanmış bölge olarak işaretlendikten sonra, kod yalnızca güçlü güvenilirlik sözleşmelerine sahip diğer kodları çağırmalı ve kod hataları işlemeye hazırlanmadığı sürece hazırlıksız veya güvenilir olmayan yöntemlere sanal çağrılar yapmamalıdır. CLR, CER'de yürütülen kodlar için iş parçacığı iptallerini geciktirir.
Önemli
CER yalnızca .NET Framework'te desteklenir. Bu makale .NET Core veya .NET 5 ve üzeri için geçerli değildir.
Kısıtlanmış yürütme bölgeleri, ek açıklamalı try bloğunun yanı sıra, özellikle CriticalFinalizerObject sınıfından türetilen sınıflarda yürütülen kritik sonlandırıcılar ve ExecuteCodeWithGuaranteedCleanup yöntemi kullanılarak yürütülen kod ile birlikte CLR içinde farklı biçimlerde kullanılır.
CER Önceden Hazırlık
CLR, bellek yetersiz koşullarını önlemek için CER'leri önceden hazırlar. CLR'nin tam zamanında derleme veya tür yükleme sırasında bellek yetersizliği durumuna neden olmaması için önceden hazırlık gereklidir.
Geliştirici, bir kod bölgesinin CER olduğunu belirtmelidir.
Özniteliğin uygulandığı tam çağrı grafiğindeki ReliabilityContractAttribute en üst düzey CER bölgesi ve yöntemleri önceden hazırlanır. ReliabilityContractAttribute yalnızca Success veya MayFail durumlarının garantilerini belirleyebilir.
Sanal gönderim gibi statik olarak belirlenemeyen çağrılar için önceden hazırlık yapılamaz. PrepareMethod Bu durumlarda yöntemini kullanın. yöntemi kullanılırken ExecuteCodeWithGuaranteedCleanup , PrePrepareMethodAttribute özniteliği temizleme koduna uygulanmalıdır.
Sınırlamalar
Kullanıcılar, CER'de yazabilecekleri kod türüyle kısıtlanır. Kod, aşağıdaki işlemlerden kaynaklanabileceği gibi bant dışı bir özel duruma neden olamaz:
Açık ayırma.
Boks.
Kilit edinmek.
Hazır olmayan yöntemleri sanal olarak çağırma.
Zayıf veya var olmayan bir güvenilirlik taahhüdüne sahip yöntemleri çağırmak.
.NET Framework sürüm 2.0'da bu kısıtlamalar yönergelerdir. Tanılama, kod çözümleme araçları aracılığıyla sağlanır.
Güvenilirlik Sözleşmeleri
ReliabilityContractAttribute, güvenilirlik garantilerini ve belirli bir yöntemin bozulma durumunu belgeleyen özel bir özniteliktir.
Güvenilirlik Garantileri
Numaralandırma değerleriyle Cer temsil edilen güvenilirlik garantileri, belirli bir yöntemin güvenilirlik derecesini gösterir:
MayFail. Olağanüstü koşullar altında yöntemi başarısız olabilir. Bu durumda, yöntem başarılı veya başarısız olduğunu çağıran yönteme rapor eder. Yöntemin, dönüş değerini bildirediğinden emin olmak için bir CER içinde bulunması gerekir.
None. Yöntemin, türün veya derlemenin CER ile ilgili herhangi bir anlayışı yoktur ve durum bozulması riskini önemli ölçüde azaltmadan CER içinde çağrı yapmak büyük olasılıkla güvenli değildir. CER garantilerinden yararlanmaz. Bu, aşağıdakileri ifade eder:
Olağanüstü koşullar altında yöntem başarısız olabilir.
Bu yöntem başarısız olduğunu bildirebilir veya bildirmeyebilir.
yöntemi, en olası senaryo olan CER kullanacak şekilde yazılmaz.
Başarılı olması için bir yöntem, tür veya derleme açıkça tanımlanmazsa, örtük olarak None tanımlanır.
Success. Olağanüstü koşullarda yöntemin başarılı olması garanti edilir. Bu güvenilirlik düzeyini elde etmek için, CER olmayan bir bölgeden çağrıldığında bile her zaman çağrılan yöntemin etrafında bir CER oluşturmanız gerekir. Bir yöntem amaçlananı gerçekleştirirse başarılı olur, ancak başarı öznel olarak görüntülenebilir. Örneğin, Sayı'nın
ReliabilityContractAttribute(Cer.Success)ile işaretlenmesi, CER altında çalıştırıldığında her zaman içindeki ArrayList öğe sayısını döndürdüğü ve iç alanları hiçbir zaman belirsiz durumda bırakamayacağı anlamına gelir. Ancak CompareExchange yöntemi, başarı olarak işaretlenir; burada başarı, yarış durumu nedeniyle değerin yeni bir değerle değiştirilemediği anlamına da gelebilir. Önemli nokta, yöntemin belgelerde açıklandığı şekilde davranması ve CER kodunun, doğru fakat güvenilir olmayan kodun ötesinde herhangi bir olağan dışı davranış bekleyecek şekilde yazılmasına gerek olmamasıdır.
Bozulma düzeyleri
Numaralandırma değerleriyle Consistency temsil edilen bozulma düzeyleri, belirli bir ortamda ne kadar durumun bozulabileceğini gösterir:
MayCorruptAppDomain. Olağanüstü koşullar altında ortak dil çalışma zamanı (CLR), geçerli uygulama etki alanındaki durum tutarlılığıyla ilgili hiçbir garanti sağlamaz.
MayCorruptInstance. Olağanüstü koşullar altında, yöntemin durum bozulmasını mevcut örneğe sınırlaması garanti edilir.
MayCorruptProcess, olağanüstü koşullar altında, CLR durum tutarlılığıyla ilgili hiçbir garanti sağlamaz; yani, koşul işlemi bozabilir.
WillNotCorruptState. Olağanüstü koşullar altında, yöntemin durumu bozmaması garanti edilir.
Güvenilirlik deneme/yakalama/son olarak
Güvenilirlik try/catch/finally , yönetilmeyen sürümle aynı düzeyde tahmin edilebilirlik garantilerine sahip bir özel durum işleme mekanizmasıdır.
catch/finally blok CER'dir. Bloktaki yöntemler önceden hazırlık gerektirir ve kesintisiz olmalıdır.
.NET Framework sürüm 2.0'da kod, deneme bloğundan hemen önce çağrı PrepareConstrainedRegions yaparak denemenin güvenilir olduğunu çalışma zamanına bildirir. PrepareConstrainedRegions , bir derleyici destek sınıfının üyesidir RuntimeHelpers. Doğrudan derleyiciler aracılığıyla kullanılabilir hale gelmesini bekleyerek PrepareConstrainedRegions çağırın.
Kesintisiz Bölgeler
Kesilemez bir bölge, bir dizi yönergeyi bir CER içine gruplar.
.NET Framework sürüm 2.0'da, derleyici desteği sağlandığında, kullanıcı kodu bir yöntem çağrısından önce PrepareConstrainedRegions boş bir try/catch bloğu içeren güvenilir bir try/catch/finally kullanarak kesintisiz bölgeler oluşturur.
Kritik Öneme Sahip Sonlandırıcı Nesnesi
Bir CriticalFinalizerObject, çöp toplama işleminin sonlandırıcıyı çalıştıracağını garanti eder. Atanmasının ardından, sonlandırıcı ve çağrı grafiği önceden hazırlanır. Sonlandırıcı yöntemi bir CER'de yürütülür ve CER'ler ve sonlandırıcılar üzerindeki tüm kısıtlamalara uyması gerekir.
SafeHandle ve CriticalHandle öğelerinden devralan tüm türlerin finalizer'ının bir CER içinde yürütüleceği garanti edilir. ReleaseHandle işlevini, tutamacı serbest bırakmak için gereken tüm kodları yürütmek amacıyla türetilmiş SafeHandle sınıflarda uygulayın.
CER'lerde Koda İzin Verilmiyor
CER'lerde aşağıdaki işlemlere izin verilmez:
Açık ayırmalar.
Kilit edinmek.
Boks.
Çok boyutlu dizi erişimi.
Yöntem çağrıları yansıma aracılığıyla yapılır.
Güvenlik denetimleri. Komutları yerine getirmeyin, yalnızca bağlantı kurma taleplerini işleyin.
Saydam proxy'de alanları alma veya ayarlama.
Serileştirme
İşlev işaretçileri ve temsilciler.