2016-07-29 91 views
1

我正在編寫一個應用程序,它有一個SslStream/NetworkStream/TcpClient以及多個SqlConnection實例。我不斷地發送和接收數據,但由於這是一個可以在本地和遠程訪問多個服務器的應用程序,因此我需要監視連接以查找失敗,並在失敗時嘗試重新啓動它們。是否有一個Microsoft支持的約定,我應該如何監視這些類?該文件沒有真正顯示任何東西。我試過CanRead/CanWriteSslStream,我當然有能力監視超時。有沒有推薦的時間來計時?監視/計數超時是監視連接丟失的唯一方法嗎?C#:監控連接

回答

2

託管SqlConnection實例應該是短暫的。只有在需要時才創建它們,然後將它們處理掉。不要讓它們隨時隨地在你的應用程序中隨時待命,這是非常糟糕的做法。原因是Sql Server(以及其他數據庫)實現連接池,所以創建託管連接相對便宜,因爲底層連接一旦釋放回池就會被重用。

+0

這是非常有幫助的。唯一的問題是,這個應用程序將從遠程服務接收不斷的數據包數據流,對它們進行格式化,並將它們放入多個SQL數據庫中。這是如何按照慣例處理的?如果我爲我打算插入的每一條線打開一個新的連接,是不是會得到非常大的連接?我是否應該在不同的線程上執行每個插入操作,以便在任何特定時間都可以連接大量連接? – Rob

+1

@Rob - 你可以設置一個隊列(在.net中有多個隊列提供程序)並對其進行結構化,以便將傳入的數據推送到一個隊列,然後通過將數據推送到隊列中來清空隊列中的每個XXX(某個時間幀)數據庫。在每次從隊列讀取數據並寫入DB的執行中,在該時間段內創建一個新的SqlConnection,然後在迭代完成時將其丟棄。 – Igor

+0

我沒有考慮過,這很有趣,因爲我的程序中已經有很多其他隊列了。對於多久處理一個隊列,是否有一個好的軟件經驗法則? – Rob