2011-03-17 26 views
11

ben çalıştırılabilir koda bir ifade derlemek ve temsilci olsun - bu temsilciye artık referanslar var olduğunda kod çöp toplanan alır?Anlatım <TDelegate> .Compile ve Çöp Toplama

Bu sayfada herhangi bir belge var mı? Çünkü, MSDN'de yararlı bir şey bulamadım.

cevap

11

Evet, kod çöp toplanabilir. T'yi İfade Üzerine Derleme çağırdığınızda, kod DynamicMethod'a derlenir ve bunlar çöp toplama için uygundur.

Nitekim

o MSDN üzerinde gösterilen değil, ama 4,0 gemileri .net Ne İfade olduğu DLR, içinde <T> .Compile uygulanması bir göz olabilir:

http://dlr.codeplex.com/SourceControl/changeset/view/54115#990638

rağmen derleyicinin uygulanması .net 3.5'de farklıydı, DynamicMethods hala kullanıldı (kaynak: kendim, Mono'da System.Linq.Expressions'ı uyguladık).

Derlenmiş ifade ağaçlarının toplanamadığı durum, Expression<T>CompileToMethod kullandığınız ve RunAndCollect bayrağıyla oluşturulmamış bir AssemblyBuilder'dan bir MethodBuilder ilettiğinizdir.

+0

DynamicMethod yeterince kullanıyor mu? Eric tarafından sağlanan bağlantıya göre, http://msdn.microsoft.com/en-us/library/dd554932.aspx, meclisin özel bir bayrakla oluşturulması gerekiyor. Reflektörde, DynamicMethod.GetDynamicMethodsModule() yönteminin RunAndCollect ile ancak yalnızca Run ile bir derleme oluşturmadığını görebiliyorum. – Alex

+0

Evet, bir DynamicMethod yeterlidir ve bu MSDN'de belirtilmiştir. DynamicMethods CLR'de özel işlemlere sahiptir ve gerçekten de tahsil edilebilir. –

+0

Evet, şimdi DynamicMethod sınıfının belgelerinde görebiliyorum. Teşekkürler :) – Alex