我有一個64位的.NET控制檯應用程序,基本上從MSMQ讀取消息,然後通過與SQL Server通過.NET SqlClient進行通信來處理它們。大多數情況下,它可以正常工作,但是每時每刻,即使是最簡單的操作(如構建SqlCommand參數數組),運行速度異常緩慢。在最糟糕的情況下,應用程序一次只能處理30分鐘(沒有寫入日誌,並且在詳細模式下相當健談),然後再次開始寫入,但沒有指出導致延遲的原因。這對我們的產品的可用性產生嚴重影響。爲什麼我的.NET應用程序產生如此多的頁面錯誤?
我花了幾個小時看着每一個性能計數器等,一切都指向過多的頁面讀取 - 由於這個原因,磁盤I/O最大化,我可以看到我的過程不斷地讀取pagefile.sys等等,但我不知道爲什麼,因爲應用程序的總內存使用率遠低於可用的RAM:工作集是60M,總承諾大小是300M(高,並且匹配高峯工作集 - 不是確定這是爲什麼),但這是花生相比,12G的可用內存,其中很少有人正在使用。
我已經讀過關於監視應用程序性能等的每個MS文檔,但所有內容都指向「我的應用程序需要更多內存」。好的...那麼它如何給它更多的記憶 - 沒有別的東西正在使用它!現在還有一個單獨的問題,就是應用程序的功能,它確實不需要太多的內存,但是要想降低這些內存的成本可能不值得花費更多的硬件。
還有一件事要注意:如果我啓動同一應用程序的第二個實例,它似乎運行良好。所以這顯然不是一個全系統問題。
我在這裏看到了一些類似的帖子在stackoverflow,但沒有特別有幫助的答案呢...希望比以前的海報更幸運。
你有沒有試過在這些超慢時期分析程序,看看它花費最多時間在哪些方法? Visual Studio有一個非常好的分析器 – Patashu
系統中還在發生什麼?你有其他CPU密集型進程嗎?SQL Server數據庫在哪裏運行?此控制檯應用程序每分鐘處理多少條消息?在您的環境中存在太多可能導致問題的原因......在這些緩慢的時間內使用Visual Studio調試器並附加到流程將是一個好的開始。代碼是否足夠小,以至於您可以提供一些核心邏輯例如[Pastie](http://pastie.org/)? – mellamokb
是的,我嘗試了所有的東西 - 它不會做任何事情,它不會一直做。使用任何CPU或內存的系統上沒有其他任何東西。 Sql服務器在別處。我想知道高頁錯誤是否必然是相關的,因爲我只是查看了該進程的所有磁盤I/O,而且它實際上正在向MSMQ存儲區寫入*(爲什麼寫 - 這個過程不會' t甚至生成消息,只能刪除它們?)而不是從pagefile.sys中讀取 –