相关疑难解决方法(0)

GC.Collect()和Finalize

好吧,众所周知,当GC将Finalize对象标识为垃圾时,它会隐式调用对象上的方法.但如果我这样做会发生什么GC.Collect()?终结者还在执行吗?也许是一个愚蠢的问题,但有人问我这个,我回答"是",然后我想:" 这完全正确吗? "

.net c# garbage-collection finalizer

45
推荐指数
4
解决办法
1万
查看次数

为什么我不应该使用Process.GetCurrentProcess().Kill()来退出我的WinForm应用程序?

现在,当用户想要退出我的应用程序时,我会做一些我必须做的事情(即断开与服务器的连接,保存用户数据......)然后我执行以下操作:

  • 使用布尔值退出所有主循环
  • 中止仍在运行的线程(通常是我的服务器轮询线程)
  • 请致电Application.Exit();

这需要几秒钟才能退出,并没有真正的用途(一切都已保存在服务器上,所以我真的不在乎那里发生了什么)

如果我使用它,我立即终止,没有任何我能想到的缺点:

 System.Diagnostics.Process.GetCurrentProcess().Kill();
Run Code Online (Sandbox Code Playgroud)

为什么我不会终止我的进程并让CLR放弃AppDomain?

我知道小心处理你的共享资源(IO文件处理程序等)很重要(所以请不要回答:)),但一旦完成,是否真的有理由干净地退出我的应用程序?

.net termination

23
推荐指数
2
解决办法
1万
查看次数

函数内的Dispose方法是否重要?

所以最近我一直在使用一次性物体,我想知道在一个函数中处理一个对象是否有用?在这两个函数之间使用.Dispose()在函数内部确实很重要,因为函数中的所有对象一旦完成就会消失

void FOO()
{
    var x= new DisposableObject();
    //stuff
}

void FOO()
{
    using(var x= new DisposableObject())
    {
        //stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

c# dispose idisposable function

4
推荐指数
2
解决办法
607
查看次数

Finalize()期间的异常:您使用什么方法来检测垃圾收集器时间异常?

我正在开发一个非常广泛的.NET系统,涉及大量的系统编程.大部分时间,我使用IDisposable模式处理资源处理,但有时这不适用(或错误地遗漏)并且在Finalize()期间资源被破坏.这可能发生在COM互操作中,或者当析构函数调用Dispose()并且其中有异常时.

基本上:当终结器可能抛出时,并不总是能够清楚地看到和处理每个场景.当它发生时,应用程序肯定会崩溃.

我特别关注这类问题的原因是终结器不是由创建或使用对象的线程调用的,因此将异常绑定到创建对象的上下文几乎是不可能的.你得到的只是一些通用的GC线程.

所以,现在向公众提问:如果你解决了这些问题,你会怎么做才能控制它们?标记对象?使用第三方工具来跟踪这些问题?

另外:是否有可能触发某种全局"终结者投掷"事件,至少记录这个问题已经发生?

编辑1:非常感谢所有提交宝贵意见的人,我想我现在对需要做些什么更清楚了.我真的想从这个讨论得到的最后一件事是,如果有人知道在终结器中触发异常代码的方法(即使应用程序崩溃仍然是不可避免的),那么我至少可以记录它,而不必修改每个的析构函数类.

.net garbage-collection

2
推荐指数
1
解决办法
2844
查看次数