目       录

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。如下图:

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

4.   异常信息分析

首先异常信息的Exception已经捕捉到了,但是运行的程序异常退出了(Abort)。查找官方的文档,按关键lockrecursionexception搜索,网址:https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.lockrecursionexception?view=netcore-3.1。关键提示信息,如下图:

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

网站:http://www.ineuos.net

联系QQ:504547114

合作微信:wxzz0151

界面如下图:

.NETCore在析构函数(Finalize)在Linux下引起程序异常退出现象的更多相关文章

  1. linux下c程序调用reboot函数实现直接重启【转】

    转自:http://www.blog.chinaunix.net/uid-20564848-id-73878.html linux下c程序调用reboot函数实现直接重启 当然你也可以直接调用syst ...

  2. Linux下C程序的编辑,编译和运行以及调试

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  3. 位图文件(BMP)格式以及Linux下C程序实现(转)

    源:位图文件(BMP)格式以及Linux下C程序实现 说到图片,位图(Bitmap)当然是最简单的,它是Windows显示图片的基本格式,其文件扩展名为*.BMP.由于没有经过任何的压缩,故BMP图 ...

  4. Linux下C程序内存泄露检测

    在linux下些C语言程序,最大的问题就是没有一个好的编程IDE,当然想kdevelop等工具都相当的强大,但我还是习惯使用kdevelop工具,由于没有一个习惯的编程IDE,内存检测也就成了在lin ...

  5. Linux下C程序的内存映像

    2.Linux下C程序的内存映像 2.1. 代码段.只读数据段(1)对应着程序中的代码(函数),代码段在Linux中又叫文本段(.text)(2)只读数据段就是在程序运行期间只能读不能写的数据,con ...

  6. Linux C程序异常退出怎么办——core文件帮你忙

    Linux C程序异常退出怎么办——core文件帮你忙 http://blog.csdn.net/zhu2695/article/details/51512138

  7. 【转】Linux下进程/程序网络带宽占用情况查看工具 -- NetHogs

    http://www.cnblogs.com/carbon3/p/5930803.html 之前VPS侦探曾经介绍过流量带宽相关的工具如:iftop.vnstat,这几个都是统计和监控网卡流量的.但是 ...

  8. linux下c程序的链接、装载和库(1)

    读完<程序员的自我修养--链接.装载和库>相关章节,想来总结一下,若有错误,请指正,多谢. 1. 什么叫目标文件? 你的工程里有很多xxx.c这样的源文件,这些文件是文本文件,只有人能够认 ...

  9. Linux下修改默认字符集--->解决Linux下Java程序种中文文件夹file.isDirectory()判断失败的问题

    一.问题描述: 一个项目中为了生成树状目录,调用了file.listFiles()方法,然后利用file.isDirectory()方法判断是否为目录,该程序在windows下运行无问题,在Linux ...

随机推荐

  1. python分支结构

    if分支 一.单分支结构 # if 表达式:#     语句块# 后续语句 # 执行流程:如果表达式结果为真,则执行语句块.否则,直接执行后续语句 二.双分支结构 # 双分支语句# if 表达式:# ...

  2. Java后台服务慢优化杂谈

    Java后台服务慢优化杂谈 前言 你是否遇到过这样的场景,当我们点击页面某个按钮后,页面一直loading,要等待好几分钟才出结果的画面,有时直接502或504,作为一个后台开发,看到自己开发的系统是 ...

  3. 方法在class文件中的存在形式MethodInfo

    一个方法对由一个method_info结构所定义.一个class文件中,不会同时出现两个方法同时有相同的名称和描述符 method_info结构如下 参考Field 代码实现 public class ...

  4. springcloud高级

    第一章 负载均衡 Ribbon   (Spring Cloud 高级)   一. Ribbon 在微服务中的作用   1 什么是 Ribbon   1.Ribbon 是一个基于 Http 和 TCP ...

  5. idea Tomcat部署war和war exploded的区别

    原文地址:https://blog.csdn.net/linjpg/article/details/73322881 在使用IDEA开发项目时,部署Tomcat的时候通常会出现以下情况: 是选择war ...

  6. 使用script打开页面

    <script src="x" onerror=javascript:window.open("http://192.168.38.1/csrf.html" ...

  7. 腾讯大牛半年心血高级编程PDF,帮你轻松构建企业级Web应用

    毫无疑问,Java 是这些年来最流行的编程语言之一.它无处不在一计算机. 手机.网站以及各种嵌入式设备中都存在着大量的Java 应用程序,而其中应用最为广泛的应该就是Java EE Web应用程序(以 ...

  8. Unity Plugins的使用方法

    一.为插件设置平台的方法 unity5之前,是通过把插件搞到对应目录进行区分平台的(比如在build target是ios平台时只把IOS目录的插件build进去),unity5之后提供了设置平台/c ...

  9. Spine学习五- spine动画融合

    在许多地方,都需要用到动画融合,unity的新版动画系统已经能够很方便的进行动画融合,那么使用spine的动画状态机的情况下,如何来进行动画融合呢? 官方有两种方案,一种是使用混合动作实现,另一种是使 ...

  10. 2020JavaWeb实现文件下载

    Servlet实现文件下载: package com.demo.test; import org.apache.commons.io.IOUtils; import javax.servlet.Ser ...