की तुलना में प्रदर्शन को अंतिम रूप देना जीसी.Suppress के साथ एक अंतिम वस्तु है सामान्य सामान्य अनावश्यक वस्तु के रूप में समान है? नीचे दिए गए कोड नेट 2 और 4 पर दोनों साबित करने के लिए वे अलग तरह से व्यवहार कर रहे हैं, लगता है:जीसी.Suppress गैर-अंतिम प्रयोज्य ऑब्जेक्ट
class Class1 {
public Class1()
{
GC.SuppressFinalize(this);
}
//~Class1() { }
}
class Program
{
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i=0; i<100000000; i++)
{
new Class1();
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
}
}
finalizer जोड़ा जा रहा है, लेकिन कुछ और नहीं बदल रहा है, अब तक दूर नहीं रह गया (12601 एमएस की तुलना में लेने के लिए कोड का कारण बनता है 88 9 एमएस)।
मैंने सोचा कि SuppressFinalize ऑब्जेक्ट हेडर में थोड़ा सा सेट करता है जिससे जीसी ऑब्जेक्ट को एक गैर-अंतिम वस्तु के समान व्यवहार करता है, लेकिन ऐसा लगता है कि यह मामला नहीं है। तो क्या चल रहा है? एक गैर-अंतिम वस्तु के बीच क्या भिन्न है और GC.SuppressFinalize के साथ एक अंतिम वस्तु को बुलाया जाता है?
ने इसे 4.5 नेट बीटा पर भी दोहराया –
संयोग से, मैंने परीक्षण दोहराया, लेकिन इसके बजाय समय 'जीसी' कोलेक्ट() करने में कितना समय लगा। GC.WaitForPendingFinalizers(); जीसी। चयन(); 'सभी' नए 'के बाद। बनाम (दबाने वाले) फाइनलाइज़र के बिना बनाम कोई सराहनीय अंतर नहीं था। – dlf