[C#] CLR 在過去 60 秒一直無法從 COM 內容 0x39acb0 轉換為 COM 內容 0x39ae20

  • 10976
  • 0
  • C#
  • 2017-09-05

[C#] CLR 在過去 60 秒一直無法從 COM 內容 0x39acb0 轉換為 COM 內容 0x39ae20

錯誤概述

CLR 在過去 60 秒一直無法從 COM 內容 0x39acb0 轉換為 COM 內容 0x39ae20。

 

錯誤訊息

CLR 在過去 60 秒一直無法從 COM 內容 0x1a1d38 轉換為 COM 內容 0x1a1ea8。
擁有該目的內容/Apartment 的執行緒,很可能正在進行非提取等候或正在處理非常長的執行作業,而未提取 Windows 訊息。
這種情況通常會對效能產生負面影響,甚至可能導致應用程式停止回應,或導致記憶體使用量持續隨時間而累積。
若要避免這個問題,所有單一執行緒的 Apartment (STA) 執行緒都應該使用提取等候基本方法 (例如 CoWaitForMultipleHandles),並且在長時間的執行作業中定期提取訊息。

 

 

情境說明

將 DataGridView 裡面超過 20000 筆的資料,逐筆下 Insert Query 到 Oracle,執行一段時間後跳錯:

0000

 

解決方案

確定程式執行沒問題的話,可以關閉Visual Studio 偵錯的行為
debug => Exceptions => MDA(Managed Debugging Assistants)
不要勾選 ContextSwitchDeadlock

image

 

參考資料

ContextSwitchDeadlock請問是甚麼來的?

 

創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權,文章歡迎轉載,請註明出處,謝謝~~~