in

Darkthread

黑暗執行緒

Browse by Tags

  • 【茶包射手日記】用 TransactionScope 包 LINQ 迴圈查詢出錯

    使用者報案某網頁功能故障,經抽絲剝繭鎖定爆炸點在一段「TransactionScope 中以 LINQ to SQL 取回物件集合,跑 foreach 開連線查資料庫」邏輯(警語:跑迴圈執行資料庫查詢,迴圈次數如過高將成效能殺手,宜避免),簡化為以下程式片段可重現問題:(註: 程式碼經過簡化,在 foreach 迴圈裡不斷開啟資料庫連線看起來很突兀,但實際案例中 foreach 迴圈是呼叫外部程式庫的共用函式,要追進去才會知道其中開了連線查詢資料庫) using (var tx = new TransactionScope()) { using (var db = GetLinqToSqlDataContext...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 04-26-2018
  • 【茶包射手日記】只能跑 32 位元的 AnyCPU .NET 程式

    測試某個 COM+ 元件應用專案,開發者所附的範例專案測試成功,我自己新增 Console Application 或 Windows Form 專案則卡在找不到 Registry 無法執行。強烈懷疑與 x86/x64 有關,由於只有註冊 64 位元 COM+,專案跑 x86 找不到 Registry 是意料中事,但詭異之處在於我已確認過範例專案跟我新增的專案都是設 Any CPU 無誤,甚至放在同一個 Solution 測試,卻一個成功一個失敗。 實測將新增 WinForm 或 Console 專案平台目標(Platform Target)改為 x64 可排除問題,但無法解答為什麼範例專案設...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 10-22-2017
  • Dictionary 多執行緒存取衝突吃光 CPU

    這是一個老鳥失足,程式沒寫好吃光 CPU 的故事。開始前推薦大家兩篇先修知識: WinDBG 應用實例:找出 ASP.NET CPU 100% 原因 ASP.NET CPU 飆高問題之傻瓜分析工具-DebugDiag Tools 接獲通報,某主機在離峰時段出現 CPU 維持 50% 高檔狀況,來源則是某個 ASP.NET AppPool Process。依照 SOP,先擷取 Memory Dump 後再重啟 AppPool。(提醒:建立 Dump 檔前需確認 AppPool 是 32 位元還是 64 位元,若為 32 位元需 改用 32 位元版 TaskManager ,32 位元版 TaskManager...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 09-04-2017
  • C# 連線 HTTPS 網站發生驗證失敗導致基礎連接已關閉

    某台透過 .NET WebClient 物件爬網頁抓資料排程忽然出現: 基礎連接已關閉: 傳送時發生未預期的錯誤。 ---> System.IO.IOException: 驗證失敗,因為遠端群體已經關閉傳輸資料流。 The underlying connection was closed: An unexpected error occurred on a send. ---> System.IO.IOException: Authentication failed because the remote party has closed the transport stream 有趣的是...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 08-19-2017
  • 使用 Process Explorer 查看 .NET Callstack

    WinDbg 追查 CPU 飆高問題 一文發表後,在 FB 收到網友 Webber Han 回饋(在此感謝),提到射茶包利器 Process Explorer 也能像 WinDbg 一樣檢視 Callstack 中的 .NET 組件、函式資訊,查了一下,這是 2012 年 15.2 版就加入的功能,Lag 大了。 關鍵在於「Configure Symbols」有無設定妥當,Process Explorer 的 .NET Callstack 解析也是借助 WinDbg 完成,故機器要先裝妥 WinDbg,開啟 Process Explorer 選單 Options / Configure Symbols...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 02-27-2017
  • 【茶包射手筆記】Dictionary.Add()效能問題調查

    依據 MSDN文件 : If Count is less than the capacity, this method approaches an O(1) operation. If the capacity must be increased to accommodate the new element, this method becomes an O(n) operation, where n is Count. 只要Dictionary資料筆數沒超過Capacity(Capacity可在建構時指定),資料新增屬O(1)操作,每次呼叫的執行速度不因Dictonary資料量多寡改變,理論上為定值...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 06-15-2015
  • 【茶包射手日記】.NET程式被判定不是有效的 Win32 應用程式

    接獲報案,某隻.NET程式在本機測試正常,同一個EXE檔搬到特定幾台機器,一執行就出現"is not a valid win32 application"(中文版為"不是有效的 Win32 應用程式")。 問題機器為32位元Windows 2003,上面已經有多個.NET寫的排程程式運行中,檢查Windows\Microsoft.NET\Frameworks目錄,v1.0到v4.0.*資料夾都在,判斷已裝到.NET Framework 4.0,而另外寫一個簡單.NET 4 Console Applicatione測試程式丟上問題機器可正常執行。原本一度懷疑問題主機中毒...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 01-28-2015
  • 【茶包射手日記】EPPlus 3.1.2 Bug Fixing

    發現EPPlus 3.1.2版Bug一枚。 開啟現有xlsx後,不做任何修改就儲存,再使用Excel開啟會出錯。例如以下範例: using (ExcelPackage p = new ExcelPackage(new FileInfo("通訊錄.xlsx"))) {      p.Save(); } 程式執行後使用Excel開啟重新儲存的通訊錄.xlsx檔案,會出現以下錯誤: Excel 在 '通訊錄.xlsx' 中找到無法讀取的內容。您要回復此活頁簿的內容嗎? 若您信任此活頁簿的來源,請按一下[是]。 Excel found...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 12-05-2012
  • 【茶包射手日記】LINQ過量載入陷阱及.NET記憶體限制

    今天處理了一件.NET服務故障案件。有個.NET開發的Windows服務,其任務為每隔幾分鐘查詢資料庫,取出待處理的作業項目,依其指示執行相關動作。狀況為資料庫仍有大量待處理項目,但服務未如預期取回資料逐筆消化。 幸運的是,程式設計時已加入頗為詳細的Log機制,很快地在Log檔發現記憶體不足錯誤訊息: System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.    at System.Data.SqlClient.TdsParser.ReadSqlValue...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 10-09-2012
  • 【茶包射手日記】.NET 2.0 Runtime版本的祕密

    今天遇到的案例,一個.NET 2.0開發的FTP上傳程式在A機器運作正常,移到B機器執行卻出現路徑錯誤: string ftpUrl = "ftp://blah.boo.boo.blahboo//folder/file.txt" ; FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpUrl); request.Method = WebRequestMethods.Ftp.UploadFile; request.Credentials = new NetworkCredential(uname, upass...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 09-28-2012
第1頁,共3頁 (23個項目) 1 2 3 下一頁 >
Powered by Community Server (Non-Commercial Edition), by Telligent Systems