हां, कोड कचरा एकत्र किया जा सकता है। जब आप टी के अभिव्यक्ति पर संकलन कहते हैं, तो कोड को DynamicMethod में संकलित किया जाता है, और वे कचरा संग्रहण के लिए योग्य हैं।
वास्तव में यह MSDN पर संकेत दिया नहीं कर रहा है, लेकिन आप अभिव्यक्ति डीएलआर, जिसमें < टी > .Compile के कार्यान्वयन पर एक नज़र हो सकता है क्या 4.0 जहाजों शुद्ध:
http://dlr.codeplex.com/SourceControl/changeset/view/54115#990638
हालांकि कंपाइलर का कार्यान्वयन .NET 3.5 में भिन्न था, डायनेमिक मोड का उपयोग अभी भी किया गया था (स्रोत: स्वयं, मैंने सिस्टम लागू किया। मोनो में लिंक्स.एक्सप्रेस)।
जिस मामले में संकलित अभिव्यक्ति पेड़ एकत्रित नहीं होते हैं, वह तब होता है जब आप Expression<T>CompileToMethod का उपयोग करते हैं, और आप एक असेंबलीबिल्डर से मेथडबिल्डर पास करते हैं जो RunAndCollect ध्वज के साथ नहीं बनाया गया था।
स्रोत
2011-03-17 14:30:24
पर्याप्त गतिशील मोड का उपयोग कर रहा है? एरिक द्वारा प्रदान किए गए लिंक के अनुसार, http://msdn.microsoft.com/en-us/library/dd554932.aspx, असेंबली को एक विशेष ध्वज के साथ बनाया जाना चाहिए। परावर्तक में मैं देख सकता हूं कि विधि DynamicMethod.GetDynamicMethodsModule() RunAndCollect के साथ एक असेंबली नहीं बनाता है लेकिन केवल रन के साथ। – Alex
हां, एक डायनामिक मोड पर्याप्त है, और यह एमएसडीएन में इंगित किया गया है। डायनामिक मोड में सीएलआर में विशेष हैंडलिंग है, और वास्तव में संग्रहित हैं। –
हां, मैं इसे अब डायनामिक मोड क्लास के दस्तावेज़ में देख सकता हूं। धन्यवाद :) – Alex