我目前正在C#中的一个应用程序,该应用程序在其他方法调用的每次迭代之后在Thread.Sleep调用的无限循环上运行。我主要是 -如何实现一个无限循环的单例模式 - C#
static void Main(string[] args)
{
bool isOnlyInstance = false;
Mutex mutex = new Mutex(true, "RiskMetricsSensitivitiesDatabaseLoader", out isOnlyInstance);
if (!isOnlyInstance)
{
return;
}
while (true)
{
ProcessData();
Thread.Sleep(MainLoopSleep);
}
GC.KeepAlive(mutex);
}
我已经插在方法结束时保持活动的呼叫,保证单互斥按预期工作,通过各种网站的概述。对KeepAlive的调用应该保持垃圾收集不会抛出互斥量,因为.NET期待着预测/优化垃圾收集。
我的问题是,由于实际调用KeepAlive永远不会到达,我应该把它放在Thread.Sleep之后的循环中吗?编译器警告KeepAlive永远不会被调用,我担心它会忽略垃圾回收预防算法中的这一行。
把它放在一个finally块中,如果你如此担心。当然,它不应该有所作为,因为循环是无限的 - 它只会在程序关闭之前调用“KeepAlive()”... – 2010-01-25 18:54:53
什么网站?这味道不好。 – jason 2010-01-25 18:54:57
我不明白为什么GC应该收集你的互斥体,如果你仍然持有对它的引用(就像它似乎)。你能提供一些链接到提到这个问题的网站吗? – LorenzCK 2010-01-25 19:02:53