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

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

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

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

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

該方法中對(duì)word文件進(jìn)行相關(guān)了操作,因?yàn)槲抑耙苍诙嗑€程環(huán)境下調(diào)用過該方法,并且沒遇到這個(gè)問題,所以同事讓我過去看看怎么回事。這個(gè)方法在對(duì)文件進(jìn)行相關(guān)操作后,會(huì)調(diào)用另外一個(gè)方法釋放word對(duì)象,部分代碼如下:

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對(duì)象并關(guān)閉word進(jìn)程。因?yàn)楫惓P畔⒍ㄎ辉谶@里,所以我過去后就從這里開始看,但是看了半天,也沒看出類庫中的方法有什么問題,因?yàn)橹拔沂褂玫臅r(shí)候沒遇到這種情況,因此我覺得可能不會(huì)是這里的問題,并且我負(fù)責(zé)的那個(gè)產(chǎn)品已經(jīng)經(jīng)過了大量的測試,肯定是沒問題的,所以我說讓我看看你是怎么調(diào)用的吧,打開他的代碼看了一眼,整體上沒什么其他問題,但是有個(gè)地方引起了我的注意,代碼中對(duì)該類的實(shí)例化放在了全局范圍,因?yàn)槭莻€(gè)cs項(xiàng)目,這么做會(huì)導(dǎo)致該對(duì)象始終被引用,因此即使在垃圾回收時(shí)也無法被釋放,而這里調(diào)用的又是com組件,就導(dǎo)致了word進(jìn)程無法關(guān)閉,并且同事在這里用的是多線程,所以程序一運(yùn)行起來,會(huì)出現(xiàn)一大堆word進(jìn)程關(guān)不掉。于是就將這里的對(duì)象實(shí)例化放到了線程方法中,這樣在方法執(zhí)行結(jié)束后,堆中的對(duì)象就處于無引用狀態(tài),在垃圾回收時(shí)就被釋放了,問題就自然解決了。其實(shí)這里跟單線程還是多線程沒關(guān)系,主要是在全局范圍內(nèi)進(jìn)行實(shí)例化導(dǎo)致了對(duì)象不能被垃圾回收,所以在寫代碼的時(shí)候一定要注意對(duì)象的生命周期。

相關(guān)文章

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

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

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

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

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

    C#校驗(yàn)時(shí)間格式的場景分析

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

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

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

    如何在C#中集成Lua腳本

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

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

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

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

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

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

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

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

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

    Unity 按鈕添加OnClick事件操作

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

最新評(píng)論