程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 線程與COM

線程與COM

編輯:C#入門知識

場景:

C++部分封裝為COM,C#來調用。調用可能是在線程中的。

應用程序退出時,C#的部分 自動清理,某些線程可能還沒有完全停掉。

COM內部的東西也在釋放內存。

這個時候,稍有不慎,就會崩潰。

沖突點:

1. 多個線程重復ReleaseComObject,

2. C#某個線程還在使用,另外一個線程或者主線程去ReleaseComObject。

3. 已經進行了ReleaseComObject, c#某個線程還在使用。

最讓人郁悶的地方是:

 = 


這個Try-Catch 是沒用的,出來異常,照樣死掉。

 

仔細排查,解決辦法如下:

1. 針對多個線程重復ReleaseComObject的問題,確定“誰創建誰Release”的原則,無法確定的,留到App Exit的時候Release。

2. 資源已經Release,還在使用的問題

檢查發現有個線程sleep了100個毫秒,這個趕緊改掉。App exit的時候,100ms可以干好多事情的。
另外, 不知道有沒有好的辦法來判斷COM對象存在與否,能否安全調用。

3. 正在使用的資源,另外一個線程去Release, 遵照第一個原則來執行。

4. 線程內循環的方法,粒度盡量小,便於及時更新UI和快速剎車。

5. 線程工廠,盡可能的簡單明了。復雜的代價是寫的痛苦,維護的痛苦。

 

嘗試著改了幾個地方,發現還是有問題。失控的多線程遇上了COM,真的難搞。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved