2011-02-10 168 views
9

我使用Windows-Mobile and Windows-CE使用SqlCE我不知道該怎麼做更好。要關閉或不關閉數據庫中的連接

要在程序打開時打開連接,請運行任何查詢的... update ...刪除數據庫並關閉程序關閉後的連接?

或打開連接運行任何查詢的更新...刪除數據庫並立即關閉連接?

回答

13

不錯。答案遍佈各地。這是我從經驗中知道,並與SQL精簡團隊互動:

  1. 關閉連接刷新你所做的更改,否則發動機做之前等待的旺盛期。在完成使用後關閉連接以確保您的更改實際上進入商店時,這是一個好主意。寫入之後和刷新之前的電源丟失將丟失數據。
  2. 沒有官方連接池,但首先打開連接很昂貴(即慢),其他所有連接都很快。我從團隊得到的建議是在應用程序啓動時實際建立連接並將其打開。您實際上並不需要使用它,但保持打開狀態可以保持大量連接信息的緩存,以便後續連接到同一商店的操作很快。

所以答案其實就是兩者。

編輯

對於那些有興趣,這是如何工作的一個很好的例子可以在OpenNETCF ORM library可以看出。該庫默認情況下會創建一個「維護」連接,該連接保持打開狀態並用於執行模式查詢等操作。所有其他數據操作使用自己的連接。您還必須選擇將庫配置爲在商店的整個生命週期中重用單個連接,或者每次接觸商店時都使用新的連接。性能和行爲一直都是我使用默認設置的所有項目中最好的(這就是爲什麼我將它設爲默認設置)。

+0

感謝您的信息。剛開始使用您的ORM庫。 :-) – 2012-01-19 04:35:42

2

每次完成sql事務以釋放連接端口時,應該關閉連接。總是一個避免安全漏洞的好做法。

+2

你能解釋說「安全漏洞」嗎? SQL Compact是在進程中託管的,因此沒有「連接端口」。 – ctacke 2011-02-11 00:00:17

1

在像wince這樣的單用戶平臺上,保持連接打開並沒有什麼壞處,你可能會獲得更好的性能。

1

連接建立是一個緩慢的操作,所以創建和關閉它可能會減慢應用程序的運行速度。另一方面,如果您有很多客戶端,連接池將會被快速填充,其他客戶端將無法連接。

2

這裏已經有一些相互矛盾的答案。

說實話,我並不確定WinCE如何處理連接。我不認爲有一個ConnectionPool。

但.NET中的一般模式是保持連接儘可能短。這可以提高可靠性並防止資源泄漏。確保你知道using (var conn = ...) { ... }模式。

所以我會說:去你的第二個選擇,只有保持連接更長,如果你真的遇到性能問題,並且如果打開連接是原因。我不認爲這將與SqlCE配合使用

3

始終保持連接在Windows Mobile應用程序的整個生命週期中保持打開狀態。打開SQL Server Compact數據庫是一項代價高昂的操作。

0

如果關於丟失,因爲你不打電話Close()頻繁,你可以在提交更改立即磁盤事務中執行代碼數據的擔心:

using (SqlCeTransaction transaction = this.connection.BeginTransaction()) 
{ 
    using (SqlCeCommand command = new SqlCeCommand(query, connection)) 
    { 
     command.Transaction = transaction; 
     command.ExecuteNonQuery(); 
    } 
    transaction.Commit(CommitMode.Immediate); 
} 

當然,還有一些性能使用時,會丟失CommitMode.Immediate太頻繁了。