का उपयोग कर एक आवेदन के बारे में उनकी article about preventing multiple instances में बनाम, माइकल Covington इस कोड को प्रस्तुत करता है , क्योंकि इसमें कोई अतिरिक्त संदर्भ नहीं है।GC.KeepAlive
मेरा प्रश्न: म्यूटेक्स को एक ही काम में लपेटकर लपेट जाएगा? यही है, क्या निम्नलिखित जीसी को मेरे नीचे से गलीचा खींचने से रोक देगा?
Mutex m = new System.Threading.Mutex(true, "YourNameHere", out ok);
try
{
// do stuff here
}
finally
{
m.Close();
}
और मुझे लगता है यह होगा कि m.Close() वहाँ पर्याप्त होगा:
static void Main() // args are OK here, of course
{
bool ok;
using (var m = new System.Threading.Mutex(true, "YourNameHere", out ok))
{
if (! ok)
{
MessageBox.Show("Another instance is already running.");
return;
}
Application.Run(new Form1()); // or whatever was there
}
}
मेरे पेट प्रतिक्रिया का उपयोग कर काम करेंगे, का उपयोग कर के बाद से (होना चाहिए) है के बराबर है जेआईटी कंपाइलर को संकेत देने के लिए कि एक और संदर्भ है, इस प्रकार समय से पहले कचरा संग्रह को रोकता है।
मैं कोई सीएलआर विशेषज्ञ नहीं हूं (यही कारण है कि मैं कोई जवाब नहीं जोड़ रहा हूं) लेकिन ऐसा लगता है कि आप जो कर रहे हैं वह काम करना चाहिए। मैं कहता हूं इसे आज़माएं और देखें। –
जीसी के बारे में बात करते समय, "इसे आज़माएं और देखें" एक बुरा विचार साबित होता है। मेरे पास ऐसे मामले थे जहां परीक्षण ने कहा कि इसे काम करना चाहिए, लेकिन यह उत्पादन में विफल रहा। रिलीज बनाम डीबग मोड में जेआईटी कंपाइलर कैसे काम करता है इस अंतर के साथ बहुत कुछ करना है। –