.NETCore在析構函數(Finalize)在Linux下引發程序異常退出現象

目       錄html

1.      現象概述... 1數據庫

2.      操做數據庫的代碼... 2api

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。以下圖:ui

        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

  界面以下圖:

相關文章
相關標籤/搜索