2013-05-20 69 views
2

我們正在測試一些選項來解決與.NET 4.0的SqlClient(GC地段和終結的,等等)的性能問題,並正在考慮使用不同的SQL客戶端實現的 - 單浮現在腦海。我可以在MS.Net framework 4.0中使用SqlClient的Mono實現嗎?

1)是否有可能使用單執行的SqlClient的一個MS.Net應用程序嗎?如果是這樣 - 如何?
2)單聲道實現是否「穩定」?哪個版本是最值得推薦的?
3)做單執行的SqlCommand,QueryResults的等含有終結?

謝謝!

回答

4

如果你看到這些影響GC,那麼建議沒有正確使用它們。其中,SqlDataReader沒有首先終結,所以我想我們談論SqlCommandSqlConnection。這兩個從Component繼承,並在兩種情況下Dispose()呼叫從GC 註銷他們 - 這就是:

public void Dispose() 
{ 
    this.Dispose(true); 
    GC.SuppressFinalize(this); 
} 

所以:如果您在設置這些出現在GC終結,看看,看看你是否正確處理你的對象。最簡單的方法是通過using聲明。例如:

using(var conn = OpenSomeConnection()) 
using(var cmd = conn.CreateCommand()) { 
    // TODO configure command 

    using(var reader = cmd.ExecuteReader()) { 
     // TODO consume data 
    } 
} 
+0

什麼非託管資源的使用情況如何?你知道Sql連接是純粹在託管代碼中實現嗎? –

+0

@我不知道沒有檢查。雖然我很想寫一個純粹的託管TDS解析器,只是爲了好玩。但是,再次處理這個問題。因此,如果您在Finalize中看到太多時間,則表示您不處理。是什麼讓你覺得在這裏最終確定它是一個問題? –

+0

剖析看着perfmon的指示所執行的過程中花費了大量的時間在GC時,許多查詢和「晉升爲finilizer」 /「定稿survivers」櫃檯扶搖直上 –

相關問題