我有一個小的控制檯應用程序,它有一個相當簡單的任務,即從數據服務器收集實時數據並將其投入數據庫。該應用程序與服務器進行TCP連接,然後將連接保持打開狀態,並將數據放入管道中。該應用程序收集它,重新格式化,然後將其夾在MSSQL數據庫中。線程控制檯應用程序拋出錯誤,但執行正常進行,沒有任何記錄
該應用程序是多線程的 - 在啓動時,我啓動一個'收集器'線程負責管理與數據源的TCP連接並將數據消息引發到內部隊列中。有一個單獨的「處理器」線程,用於查找隊列中的消息,逐個關閉它們並創建數據庫插入事務。一旦其他線程啓動並運行,初始啓動線程幾乎不做任何事情。
一切都使用NLog進行相當廣泛的記錄,無論是文件還是控制檯。
我遇到的問題是有時Windows(Server 2008)會拋出一個與下面類似的錯誤對話框(但顯然不是相同的!)。發生這種情況時,控制檯日誌記錄會暫停,以便我可以看到錯誤引發的大致時間。如果點擊「關閉程序」,應用程序將繼續正常運行,但消息隊列的大小會迅速增加,就好像收集器線程一直在運行,但處理器線程已被阻止。日誌中沒有記錄任何拋出的異常。
http://img833.imageshack.us/img833/7533/pleaseclosethisprogram.png
考慮,我認爲我趕上儘可能多的異常可能和儘可能的記錄,我難倒什麼,這可能是。我原本以爲它可能是引發異常的日誌記錄機制,但是在將log4net取出並用Nlog替換之後,我看到了相同的行爲。鑑於它只是不規則地發生,這是非常難以複製的,大約每週兩次。該應用程序是用C#.NET 4.0編寫的。
如果任何人有任何關於我可以採取的步驟來解決此問題的想法,那將非常感激。
編輯
好吧,我已經得到了從事件日誌中的一些細節,我已經完全忘記了.NET異常在那裏得到的記錄爲好。這裏的數據:
Faulting application name: DataArchiver.exe, version: 1.0.0.0, time stamp: 0x4dd027df
Faulting module name: unknown, version: 0.0.0.0, time stamp: 0x00000000
Exception code: 0x00000000
Fault offset: 0x0039b8f0
Faulting process id: 0x59c
Faulting application start time: 0x01cc13358473b6da
Faulting application path: D:\DataArchiver\DataArchiver.exe
Faulting module path: unknown
Report Id: f352ef11-7ffc-11e0-9cd0-005056bc0006
聽起來像是一個僵局。你的隊列如何實現? – 2011-05-17 06:19:44
您是否在事件查看器(控制面板,管理工具)中找到任何內容? – Groo 2011-05-17 06:19:56
聽起來像一個StackOverflow錯誤,您的操作系統正在關閉您的應用程序。檢查事件查看器以確認。 – 2011-05-17 06:29:55