Özet bir kitapta okuduğum kadarıyla, kod sözleşmeleri çalışma zamanı performansını düşürebilir.
Kod sözleşmelerini üretimde devre dışı bırakmak mümkün mü?
Özet bir kitapta okuduğum kadarıyla, kod sözleşmeleri çalışma zamanı performansını düşürebilir.
Kod sözleşmelerini üretimde devre dışı bırakmak mümkün mü?
Kullanım kılavuzu Bunu ayrıntılı bir şekilde açıklıyor - yapabileceğiniz her türlü seçenek var. Her derleme yapılandırması, sözleşmelerin yürütme süresinde kontrol edildiği farklı ayarlara sahip olabilir ve "tamam ya da hiçbir şey" seçeneği değildir - Visual Studio'da ayarlanabilen ayarlara bağlı olarak, sözleşmelerin bir kısmını ya da hiçbirini zorlayabilirsiniz.
En sevdiğim seçenekler açıklandı blogumda.
Özetlemek:
Bazı kullanıcılar Yayınlama sürümlerine dahil edilmek için Önkoşulları tercih ediyor. Bu özellikle NuGet üzerinden dağıtılıyorsa yararlıdır çünkü Code Contract dlls'i desteklemiyorlar. NuGet paketlerimde, Sürüm yapılarında Önkoşullar dahil olmak üzere geçiş yapmaktayım, ancak "Önşartsız Sürüm Oluşturma" yapısı için ayrı bir indirmeye de sahibim.
Performans farkı oldukça küçüktür ve kodunuzu dikkat çekici bir şekilde etkilemez. Gerçek zamanlı bir hisse senedi alım satım sistemi geliştirmediğiniz sürece, ciddi olarak endişelenmeyeceğim.
Üretimdeki kodu devre dışı bırakmak için, muhtemelen anlaşılmamış bir hata yerine Kod Sözleşmelerinin ek korumasını daha çok tercih ediyorum. Kod sözleşmesindeki bir hata, bazı kötü verilerin çağrı yığını ağacından 5 seviyeye geçtiği için, bazı derin çağrı yığınlarını kazmak zorunda kalmanın aksine Sözleşmenin tam olarak nerede ve neden ihlal edildiğini size söyleyecektir.
@svanryckeghem ve @Stephen Cleary:
Kullanıyorsanız veya kullanmayı planlıyorsanız
Contract.Requires<TException> ve 'Çalışma Zamanı Denetimi Denetimi'ni etkinleştirmeyin, Kod Sözleşmelerinin kullanımına bağlı olması gereken IL rewriter (ccrewrite.exe) hakkında bir çalışma zamanı hatası alırsınız. Daha sonra bunun çalışması için Çalışma Zamanı Denetimi Denetimi'ni etkinleştirmeniz gerekecektir.
IMHO kullanımı
Contract.Requires<TException>() çok daha faydalı
Contract.Requires() atılan istisna türü üzerinde kontrol sahibi olduğunuzdan.
Proje özelliklerinde Kod Sözleşmesine gidin, "Sürüm" Yapılandırmasını seçin ve çalışma zamanı kontrolünün işaretini kaldırın.