Nic*_*aro 3 c# singleton garbage-collection mutex
我目前正在使用C#中的应用程序,该应用程序在其他方法调用的每次迭代之后使用Thread.Sleep调用在无限循环上运行.我的主要是 -
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);
}
Run Code Online (Sandbox Code Playgroud)
我已经在方法的末尾插入了KeepAlive调用,以确保单个互斥锁按预期工作,如各种网站所述.对KeepAlive的调用应该可以防止垃圾收集丢弃互斥锁,因为.NET期待预期/优化垃圾收集.
我的问题是,因为实际上对KeepAlive的调用永远不会到达,所以我应该在Thread.Sleep之后将它放在循环中吗?编译器警告KeepAlive永远不会被调用,我担心它会在我的垃圾收集防止算法中忽略这一行.
P D*_*ddy 10
Mutex是一次性的.为什么不包装using?
using(new Mutex(blah, blah, blah)){
while(true){
Blah(blah);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,这甚至不会将新指定给Mutex命名变量.