यहां एक दिलचस्प प्रदर्शन है। ध्यान दें कि आपको रिलीज मोड में संकलित इस डेमो को चलाया जाना चाहिए या यह विज्ञापित के रूप में काम नहीं कर सकता है।
संस्करण 1:
private void Button_Click(object sender, EventArgs e)
{
Timer timer = new Timer(Print, null, 0, 1000);
}
private void Print(Object o)
{
if (textBox1.InvokeRequired)
{
Action<object> action = Print;
textBox1.Invoke(action, o);
return;
}
textBox1.Text = DateTime.Now.ToString();
}
संस्करण 1 खुशी से पाठ बॉक्स एक बार एक दूसरे के लिए दिनांक और समय प्रिंट होगा।
संस्करण 2:
private void Button_Click(object sender, EventArgs e)
{
Timer timer = new Timer(Print, null, 0, 1000);
}
private void Print(Object o)
{
if (textBox1.InvokeRequired)
{
Action<object> action = Print;
textBox1.Invoke(action, o);
return;
}
textBox1.Text = DateTime.Now.ToString();
GC.Collect(); // force a garbage collection
}
अब
संस्करण 2 में, दिनांक और समय केवल एक बार, क्योंकि घोषणा के बाद, वहाँ टाइमर वस्तु के लिए कोई और अधिक संदर्भ हैं प्रिंट किया जाएगा, और इसलिए टाइमर वस्तु हो जाता है एकत्र किया हुआ।
यह एक काफी योगदान वाला उदाहरण है लेकिन एक अच्छा प्रदर्शन करने के लिए बना सकता है।
मुझे इस के लिए जेफ़री रिचटर क्रेडिट करना होगा - यह उनकी उत्कृष्ट पुस्तक CLR via C#
में है।
समय की कमी एकमात्र नकारात्मक है। – Dialecticus
"संग्रह को मजबूर करना" से मुझे लगता है कि आप जीसी.कोलेक्ट() को कॉल करके मतलब मानते हैं। आपको क्यों लगता है कि यह खतरनाक होगा? क्या कुछ दस्तावेज हैं जो मुझे याद आया जो ऐसा कहता है? (मुझे एहसास है कि संभावना अधिक है, क्योंकि मैं इन दिनों नहीं रख सकता।) – David
वास्तविक समय आवश्यकताओं के साथ तंग टाइमर शायद? – leppie