Aracılığıyla paylaş


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ı Tiçerir.

  • öğesini temsil Teden veya TypeBuilder örneğiType.

    Önemli

    Derlemenin bölümlerini temsil eden tüm nesneleri serbest bırakmanız gerekir. ModuleBuilder öğesini tanımlayanT, öğ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ünden Ttüretilebilir veya T yöntemindeki T1bir parametrenin türü olabilir.

  • AByRef' ya ait statik bir alana.T

  • RuntimeTypeHandleveya bileşenine T başvuran bir , RuntimeFieldHandleRuntimeMethodHandle veya .T

  • temsil Teden nesneye erişmek için dolaylı veya doğrudan kullanılabilecek herhangi bir yansıma nesnesinin Type örneği. Örneğin, Type nesnesi T öğe Ttürü olan bir dizi türünden veya tür bağımsız değişkeni olan genel bir türden T alınabilir.

  • Herhangi bir iş parçacığının çağrı yığınındaki bir yöntem M ; burada M derlemede tanımlanan bir yöntemi T 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 .

Ayrıca bkz.