Dinamik tür oluşturma için toplanabilir derlemeler
Toplanabilir derlemeler , oluşturuldukları uygulama etki alanı kaldırılmadan kaldırılabilen dinamik derlemelerdir. Bir toplanabilir derleme tarafından kullanılan tüm yönetilen ve yönetilmeyen bellek ve içerdiği türler geri kazanılabilir. Derleme adı gibi bilgiler iç tablolardan kaldırılır.
Kaldırmayı etkinleştirmek için dinamik bir derleme oluştururken bayrağını AssemblyBuilderAccess.RunAndCollect kullanın. Derleme geçicidir (yani kaydedilemez) ve Toplanabilir derlemelerde kısıtlamalar bölümünde açıklanan sınırlamalara tabidir. Ortak dil çalışma zamanı (CLR), derlemeyle ilişkili tüm nesneleri serbest bıraktığınızda otomatik olarak bir toplanabilir derlemeyi kaldırır. Diğer tüm açılardan, toplanabilir derlemeler oluşturulur ve diğer dinamik derlemelerle aynı şekilde kullanılır.
Toplanabilir derlemelerin ömrü
Bir toplanabilir derlemenin ömrü, içerdiği türlere ve bu türlerden oluşturulan nesnelere yapılan başvuruların varlığıyla denetlenir. Aşağıdakilerden biri veya daha fazlası mevcut olduğu sürece ortak dil çalışma zamanı derlemeyi kaldırmaz (T
derlemede tanımlanan herhangi bir türdür):
T
öğesinin bir örneği.dizisinin bir
T
örneği.Tür bağımsız değişkenlerinden biri olan
T
genel bir türün örneği. Bu koleksiyon boş olsa bile genel koleksiyonlarınıT
içerir.öğesini temsil
T
eden veya TypeBuilder örneğiType.Önemli
Derlemenin bölümlerini temsil eden tüm nesneleri serbest bırakmanız gerekir. ModuleBuilder öğesini tanımlayan
T
, öğesine bir başvuru TypeBuildertutar ve AssemblyBuilder nesnesi için bir başvuru ModuleBuildertutar, bu nedenle bu nesnelere yapılan başvurular serbest bırakılmalıdır. Yapımında kullanılan bir LocalBuilder veya'nın ILGeneratorT
varlığı bile boşaltmayı önler.Dinamik olarak tanımlanmış başka bir tür
T1
tarafından yapılan ve hala kod yürütülerek erişilebilen statik başvuruT
. Örneğin,T1
türündenT
türetilebilir veyaT
yöntemindekiT1
bir parametrenin türü olabilir.A
ByRef
' ya ait statik bir alana.T
RuntimeTypeHandleveya bileşenine
T
başvuran bir , RuntimeFieldHandleRuntimeMethodHandle veya .T
temsil
T
eden nesneye erişmek için dolaylı veya doğrudan kullanılabilecek herhangi bir yansıma nesnesinin Type örneği. Örneğin, Type nesnesiT
öğeT
türü olan bir dizi türünden veya tür bağımsız değişkeni olan genel bir türdenT
alınabilir.Herhangi bir iş parçacığının çağrı yığınındaki bir yöntem
M
; buradaM
derlemede tanımlanan bir yöntemiT
veya modül düzeyinde bir yöntemdir.Derlemenin bir modülünde tanımlanan statik yöntemin temsilcisi.
Derlemede yalnızca bir tür veya bir yöntem için bu listeden yalnızca bir öğe varsa, çalışma zamanı derlemeyi kaldıramaz.
Not
Sonlandırıcılar listedeki tüm öğeler için çalıştırılana kadar çalışma zamanı derlemeyi kaldırmaz.
Yaşam süresi izleme amacıyla, toplanabilir bir derlemenin oluşturulmasında oluşturulan ve kullanılan (C#'da) veya List(Of Integer)
(Visual Basic'te) gibi List<int>
oluşturulmuş bir genel türün, genel tür tanımını içeren derlemede veya tür bağımsız değişkenlerinden birinin tanımını içeren bir derlemede tanımlandığı kabul edilir. Kullanılan tam derleme bir uygulama ayrıntısıdır ve değiştirilebilir.
Toplanabilir derlemeler üzerindeki kısıtlamalar
Aşağıdaki kısıtlamalar, toplanabilir derlemeler için geçerlidir:
Statik başvurular
Sıradan bir dinamik derlemedeki türler, toplanabilir bir derlemede tanımlanan türlere statik başvurulara sahip olamaz. Örneğin, bir koleksiyon derlemesindeki bir türden devralan sıradan bir tür tanımlarsanız, bir NotSupportedException özel durum oluşturulur. Bir toplanabilir derlemedeki bir tür, başka bir toplanabilir derlemedeki bir türe statik başvurulara sahip olabilir, ancak bu, başvuruda bulunan derlemenin ömrünü başvuran derlemenin ömrüne kadar uzatır.
.NET Framework'teki toplanabilir derlemeler için aşağıdaki kısıtlamalar geçerlidir:
COM birlikte çalışma
Toplanabilir bir derleme içinde COM arabirimleri tanımlanamaz ve bir koleksiyon derlemesi içindeki tür örnekleri COM nesnelerine dönüştürülemez. Bir koleksiyon derlemesindeki bir tür, COM çağrılabilen sarmalayıcı (CCW) veya çalışma zamanı çağrılabilen sarmalayıcı (RCW) olarak hizmet veremez. Ancak, toplanabilir derlemelerdeki türler COM arabirimleri uygulayan nesneleri kullanabilir.
Platform çağırma
özniteliğine DllImportAttribute sahip yöntemler, toplanabilir bir derlemede bildirildiğinde derlenmez. Yönerge OpCodes.Calli , toplanabilir bir derlemedeki bir türün uygulanmasında kullanılamaz ve bu tür türler yönetilmeyen koda göre düzenlenemez. Ancak, toplanamaz bir derlemede bildirilen bir giriş noktası kullanarak yerel koda çağrı yapabilirsiniz.
Sıralama
Toplanabilir derlemelerde tanımlanan nesneler (özellikle, temsilciler) sıraya alınamaz. Bu, tüm geçici yayılan türler için bir kısıtlamadır.
Derleme yükleme
Düşünceler yayma, toplanabilir derlemelerin yüklenmesi için desteklenen tek mekanizmadır. Başka bir derleme yükleme biçimi kullanılarak yüklenen derlemeler kaldırılamaz.
Bağlama bağlı nesneler
Bağlam statik değişkenleri desteklenmez. Bir toplanabilir derlemedeki türler genişletemez ContextBoundObject. Ancak, toplanabilir derlemelerdeki kod başka bir yerde tanımlanan bağlama bağlı nesneleri kullanabilir.
İş parçacığı statik verileri
İş parçacığı statik değişkenleri desteklenmez.
.NET Framework ve .NET 9 öncesi .NET sürümlerindeki toplanabilir derlemeler için aşağıdaki kısıtlamalar geçerlidir:
ile statik alanlar
FixedAddressValueTypeAttribute
Toplanabilir derlemelerde tanımlanan statik alanlarda özniteliği uygulanamaz FixedAddressValueTypeAttribute .