我使用Windows-Mobile and Windows-CE
与SqlCE
合作,我不知道还有什么可以做的。
要在程序打开时打开连接,运行任何查询...更新...删除数据库并在程序关闭后关闭连接?
或者打开连接运行任何查询的..更新...删除数据库并立即关闭连接?
答案 0 :(得分:13)
尼斯。答案到处都是。以下是我从经验和与SQL Compact团队交互中所了解的内容:
所以答案实际上都是。
修改强>
对于那些感兴趣的人,可以在OpenNETCF ORM library中看到一个很好的例子。默认情况下,库会创建一个“维护”连接,该连接保持打开状态,用于执行模式查询等操作。所有其他数据操作都使用自己的连接。您还必须选择将库配置为在Store的生命周期中重用单个连接,或者在每次触摸商店时使用新连接。在使用默认值的所有项目中,性能和行为一直是最好的(这就是为什么我把它作为默认值)。
答案 1 :(得分:3)
始终在Windows Mobile应用的生命周期内保持连接打开状态。打开SQL Server Compact数据库是一项代价高昂的操作。
答案 2 :(得分:2)
每次完成sql事务以释放连接端口时,都应该关闭连接。始终是避免安全漏洞的良好做法。
答案 3 :(得分:2)
连接建立是一个缓慢的操作,因此,创建和关闭它可能会降低应用程序的速度。相反,如果你有很多客户端,连接池将很快填满,其他客户端将无法连接。
答案 4 :(得分:2)
这里已经存在一些相互矛盾的答案。
说实话,我并不确定WinCE如何处理连接。我认为没有ConnectionPool。
但.NET中的一般模式是尽可能缩短连接。这提高了可靠性并防止资源泄漏。确保您了解using (var conn = ...) { ... }
模式。
所以我会说:选择你的第二个选项,如果你真的遇到性能问题,只保持连接时间更长,如果打开连接就是原因。我认为它不适用于SqlCE
答案 5 :(得分:1)
在像wince这样的单用户平台上,保持连接打开没有任何害处,您可能会获得更好的性能。
答案 6 :(得分: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
时仍会有一些性能损失。