目       录

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

界面如下图:

最新文章

  1. C# 计算文件MD5
  2. 安卓 Context 和 Application的关系
  3. DG - dataguard trouble shooting的相关视图
  4. 三种用于select 的选择器
  5. [Everyday Mathematic]20150216
  6. 关于javascript中的 执行上下文和对象变量
  7. 【CSS3】---嵌入字体@font-face
  8. MySQL中UNION和UNION ALL的使用
  9. 设定PCB电路板形状和物理边界
  10. mysql source 报错 Unknown command &#39;\&#39;&#39; 解决办法
  11. [大数据]-Elasticsearch5.3.1 IK分词,同义词/联想搜索设置
  12. java 泛型的类型擦除与桥方法
  13. c语言利用读取命令行(多行读取)
  14. Win10系列:VC++绘制几何图形3
  15. 关于chrome控制台警告:Synchronous XMLHttpRequest on the main thread
  16. Wannafly挑战赛13 C:zzf的好矩阵(思维)
  17. ubuntu -- 不输入密码执行sudo
  18. 码农小汪-Hibernate学习8-hibernate关联关系注解表示@OneToMany mappedBy @ManyToMany @JoinTable
  19. windows下MySQL 5.7+ 解压缩版安装配置方法--转载
  20. Redhat安装配置VNC服务器

热门文章

  1. 归纳从文件中读取数据的六种方法-JAVA IO基础总结第2篇
  2. 微信小程序入门教程
  3. vue+elementUI+vue-i18n 实现国际化
  4. miniapp基础
  5. Flutter —布局系统概述
  6. rake
  7. 和同事谈谈Flood Fill 算法
  8. python学习第八天
  9. CC2530的ADC采集外部电压
  10. SSM整合+WebUpload使用(spring+springmvc+mybatis+maven)