我使用Windows-Mobile and Windows-CE
使用SqlCE
我不知道該怎麼做更好。要關閉或不關閉數據庫中的連接
要在程序打開時打開連接,請運行任何查詢的... update ...刪除數據庫並關閉程序關閉後的連接?
或打開連接運行任何查詢的更新...刪除數據庫並立即關閉連接?
我使用Windows-Mobile and Windows-CE
使用SqlCE
我不知道該怎麼做更好。要關閉或不關閉數據庫中的連接
要在程序打開時打開連接,請運行任何查詢的... update ...刪除數據庫並關閉程序關閉後的連接?
或打開連接運行任何查詢的更新...刪除數據庫並立即關閉連接?
不錯。答案遍佈各地。這是我從經驗中知道,並與SQL精簡團隊互動:
所以答案其實就是兩者。
編輯
對於那些有興趣,這是如何工作的一個很好的例子可以在OpenNETCF ORM library可以看出。該庫默認情況下會創建一個「維護」連接,該連接保持打開狀態並用於執行模式查詢等操作。所有其他數據操作使用自己的連接。您還必須選擇將庫配置爲在商店的整個生命週期中重用單個連接,或者每次接觸商店時都使用新的連接。性能和行爲一直都是我使用默認設置的所有項目中最好的(這就是爲什麼我將它設爲默認設置)。
每次完成sql事務以釋放連接端口時,應該關閉連接。總是一個避免安全漏洞的好做法。
你能解釋說「安全漏洞」嗎? SQL Compact是在進程中託管的,因此沒有「連接端口」。 – ctacke 2011-02-11 00:00:17
在像wince這樣的單用戶平臺上,保持連接打開並沒有什麼壞處,你可能會獲得更好的性能。
連接建立是一個緩慢的操作,所以創建和關閉它可能會減慢應用程序的運行速度。另一方面,如果您有很多客戶端,連接池將會被快速填充,其他客戶端將無法連接。
這裏已經有一些相互矛盾的答案。
說實話,我並不確定WinCE如何處理連接。我不認爲有一個ConnectionPool。
但.NET中的一般模式是保持連接儘可能短。這可以提高可靠性並防止資源泄漏。確保你知道using (var conn = ...) { ... }
模式。
所以我會說:去你的第二個選擇,只有保持連接更長,如果你真的遇到性能問題,並且如果打開連接是原因。我不認爲這將與SqlCE配合使用
始終保持連接在Windows Mobile應用程序的整個生命週期中保持打開狀態。打開SQL Server Compact數據庫是一項代價高昂的操作。
如果關於丟失,因爲你不打電話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
太頻繁了。
感謝您的信息。剛開始使用您的ORM庫。 :-) – 2012-01-19 04:35:42