微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#面试问题

这是我需要帮助的面试问题.

您有以下ASP.NET代码隐藏类:

public partial class Page1 : Page 
{
    private string _value;

    public Page1() 
    {
        if (DateTime.Now.Ticks % 10 == 0)
            _value = "Test";
    }       

    ~Page1() 
    {
        if(_value.Equals("Test"))
            _value = string.Empty;      
    }
}

任何有人请求此页面,w3wp.exe进程意外终止.

>为什么会发生与用户看到黄色屏幕死亡(认的ASP.NET错误页面)?
>为什么托管堆上总是出现OutOfMemoryException?

解决方法

提示:永远不会在析构函数/ finalizer中抛出异常,否则将会杀死GC运行的线程,而GC中的线程可能会变得丑陋.

虽然在.NET 1.1中有一些容忍在后台线程中抛出的异常,这些异常已被使用,并且不会使主机进程停止,但从CLR 2.0开始就不再这样了. Quote from the doc

If Finalize or an override of Finalize
throws an exception,and the runtime
is not hosted by an application that
overrides the default policy,the
runtime terminates the process and no
active try-finally blocks or
finalizers are executed. This behavior
ensures process integrity if the
finalizer cannot free or destroy
resources.

在终结者中抛出异常是致命的.

原文地址:https://www.jb51.cc/csharp/93428.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐