我使用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