2011-02-10 194 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太频繁了。