欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

分享我在工作中遇到的多線程下導致RCW無法釋放的問題

 更新時間:2015年12月09日 09:24:56   作者:眼神與背影  
最近在做項目中遇到一個問題,在調(diào)用一個類庫中的方法時,出現(xiàn)如下異常信息:嘗試釋放正在使用的RCW,活動線程或其他線程上正在使用該 RCW,釋放正在使用的 RCW 的嘗試會導致?lián)p壞或數(shù)據(jù)丟失

最近有個同事在調(diào)用一個類庫中的方法時遇到了一個問題,異常信息如下:

嘗試釋放正在使用的RCW,活動線程或其他線程上正在使用該 RCW,釋放正在使用的 RCW 的嘗試會導致?lián)p壞或數(shù)據(jù)丟失。

該方法中對word文件進行相關(guān)了操作,因為我之前也在多線程環(huán)境下調(diào)用過該方法,并且沒遇到這個問題,所以同事讓我過去看看怎么回事。這個方法在對文件進行相關(guān)操作后,會調(diào)用另外一個方法釋放word對象,部分代碼如下:

Word._Application t = oWord as Word._Application;
object oIsSave = false;
t.Quit(ref oIsSave, ref oMissing, ref oMissing);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oDoc);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oWord);
oWord = null;
oDoc = null;
GC.Collect();
GC.Collect();

 該段代碼是為了保證立即釋放word對象并關(guān)閉word進程。因為異常信息定位在這里,所以我過去后就從這里開始看,但是看了半天,也沒看出類庫中的方法有什么問題,因為之前我使用的時候沒遇到這種情況,因此我覺得可能不會是這里的問題,并且我負責的那個產(chǎn)品已經(jīng)經(jīng)過了大量的測試,肯定是沒問題的,所以我說讓我看看你是怎么調(diào)用的吧,打開他的代碼看了一眼,整體上沒什么其他問題,但是有個地方引起了我的注意,代碼中對該類的實例化放在了全局范圍,因為是個cs項目,這么做會導致該對象始終被引用,因此即使在垃圾回收時也無法被釋放,而這里調(diào)用的又是com組件,就導致了word進程無法關(guān)閉,并且同事在這里用的是多線程,所以程序一運行起來,會出現(xiàn)一大堆word進程關(guān)不掉。于是就將這里的對象實例化放到了線程方法中,這樣在方法執(zhí)行結(jié)束后,堆中的對象就處于無引用狀態(tài),在垃圾回收時就被釋放了,問題就自然解決了。其實這里跟單線程還是多線程沒關(guān)系,主要是在全局范圍內(nèi)進行實例化導致了對象不能被垃圾回收,所以在寫代碼的時候一定要注意對象的生命周期。

相關(guān)文章

  • C#實現(xiàn)多文件打包壓縮(.Net?Core)

    C#實現(xiàn)多文件打包壓縮(.Net?Core)

    本文詳細講解了.Net?Core框架下C#實現(xiàn)多文件打包壓縮的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • C#創(chuàng)建控制Windows服務

    C#創(chuàng)建控制Windows服務

    這篇文章介紹了C#創(chuàng)建和控制Windows服務的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • C#校驗時間格式的場景分析

    C#校驗時間格式的場景分析

    本文通過場景分析給大家講解C#里如何簡單的校驗時間格式,本次的場景屬于比較常見的收單API,對第三方的訂單進行簽名驗證,然后持久化到數(shù)據(jù)庫,需要的朋友跟隨小編一起看看吧
    2022-08-08
  • 游戲開發(fā)之隨機概率的選擇算法

    游戲開發(fā)之隨機概率的選擇算法

    這篇文章主要介紹了游戲開發(fā)之隨機概率的選擇算法,需要的朋友可以參考下
    2015-07-07
  • 如何在C#中集成Lua腳本

    如何在C#中集成Lua腳本

    這篇文章主要介紹了如何在C#中集成Lua腳本,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-02-02
  • 一篇文章徹底搞清楚c#中的委托與事件

    一篇文章徹底搞清楚c#中的委托與事件

    這篇文章主要給大家介紹了如何通過一篇文章徹底搞清楚c#中的委托與事件,文中通過示例代碼介紹的非常詳細,對大家學習或者使用c#具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-07-07
  • C#正方形圖片的繪制方法

    C#正方形圖片的繪制方法

    這篇文章主要為大家詳細介紹了C#正方形圖片的繪制方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 教你C#將CSV轉(zhuǎn)為Excel的實現(xiàn)方法

    教你C#將CSV轉(zhuǎn)為Excel的實現(xiàn)方法

    這篇文章主要介紹了C#?將CSV轉(zhuǎn)為Excel,轉(zhuǎn)換之后可執(zhí)行更多關(guān)于數(shù)據(jù)編輯、格式設(shè)置等操作,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-03-03
  • C#通過經(jīng)緯度計算2個點之間距離的實現(xiàn)代碼

    C#通過經(jīng)緯度計算2個點之間距離的實現(xiàn)代碼

    這篇文章主要介紹了C#通過經(jīng)緯度計算2個點之間距離實現(xiàn)代碼,本文對實現(xiàn)原理、經(jīng)緯度基本知識等一并做了講解,需要的朋友可以參考下
    2014-08-08
  • Unity 按鈕添加OnClick事件操作

    Unity 按鈕添加OnClick事件操作

    這篇文章主要介紹了Unity 按鈕添加OnClick事件操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04

最新評論