欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.NETCore在析构函数(Finalize)在Linux下引起程序异常退出现象

程序员文章站 2022-10-04 09:45:19
目 录 1. 现象概述... 1 2. 操作数据库的代码... 2 3. 引起的异常... 2 4. 异常信息分析... 3 5. 分析结论猜测... 3 1. 现象概述 .NETCore的Console和AspNetCore程序对数据库进行操作,通过析构函数(Finalize)释放数据库连接资源, ......

目       录

1.      现象概述... 1

2.      操作数据库的代码... 2

3.      引起的异常... 2

4.      异常信息分析... 3

5.      分析结论猜测... 3


 1.   现象概述

     .netcore的console和aspnetcore程序对数据库进行操作,通过析构函数(finalize)释放数据库连接资源,在linux平台引起程序或服务异常退出,在windows平台没有出现。

2.   操作数据库的代码

     析构函数(finalize)释放数据库连接的代码,如下:

        /// <summary>
        /// 析构函数,释放数据库连接资源
        /// </summary>
        ~servesdbcontext()
        {
            dispose();
            system.diagnostics.debug.writeline("servesdbcontext 回收了!");
        }
        /// <summary>
        /// 释放数据库连接资源
        /// </summary>
        public void dispose()
        {
            if (context != null)
            {
                context.dispose();
            }
        }

3.   引起的异常

      console控制台程序,实时运行的服务运行一段时间就会出现异常信息:object reference not set to an instance of an object。如下图:

.NETCore在析构函数(Finalize)在Linux下引起程序异常退出现象

        aspnetcore应用程序,除了提示上述信息以外,还打印出来的异常信息::system.threading.lockrecursionexception: recursive write lock acquisitions not allowed in this mode。如下图:

.NETCore在析构函数(Finalize)在Linux下引起程序异常退出现象

4.   异常信息分析

      首先异常信息的exception已经捕捉到了,但是运行的程序异常退出了(abort)。查找官方的文档,按关键lockrecursionexception搜索,网址:。关键提示信息,如下图:.NETCore在析构函数(Finalize)在Linux下引起程序异常退出现象

       msdn关键提示信息:程序使用无参数构造函数创建一个 readerwriterlockslim该构造函数不允许使用递归

5.   分析结论猜测

      第一层猜测:是由于析构函数释放资源引起了程序出现递归现象(recursion)。

      第二层猜测:析构函数释放资源出现递归现象,可能是由于linux的垃圾回收机制与windows的垃圾回收机制不同引起的,因为同样的代码,在windows下没有出现任何问题,但是linux下没有更深入的研究。

      第三层猜测:类同样继承了idisposable资源释放接口,实现了dispose函数。同时又实现了析构函数(finalize)释放资源,同样调用了dispose函数。两种释放资源,在linux下垃圾回收过程造成了冲突。

     注:由于没有进一步深入研究,所以以上是针对结论的一种猜测,有感兴趣的朋友可以共同研究。


  文章:

   .net core开发的ineuos工业互联网平台,发布 ineuda 数据分析展示组件,快捷开发图形报表和数据大屏

   [视频演示].net core开发的ineuos物联网平台,实现从设备&plc、云平台、移动app数据链路闭环

   .net core开发的ineuos物联网平台部署树霉派(raspbian),从网关到云端整体解决方案

   .net core开发的ineuos物联网平台部署在ubuntu操作系统,无缝跨平台

   ineuos 物联网云操作系统2.0发布,集成设备容器、视图建模、机器学习三大模块

   ineuos云操作系统,.net core全系打造


 

    物联网&大数据技术 qq群:54256083 

   物联网&大数据合作 qq群:727664080

   网站:

   联系qq:504547114

  合作微信:wxzz0151

  界面如下图:

.NETCore在析构函数(Finalize)在Linux下引起程序异常退出现象