2010-03-11 77 views
5

我听说最好在应用程序启动时打开一个连接,并在应用程序关闭时关闭它。Windows移动精简版框架SqlCeConnection

有多个连接会发生什么样的问题?

那里的任何文章,它是最佳实践有一个连接?

你对sql ce有什么经验?

回答

2

在我们的SQL CE 3.5/Compact Framework 3.5应用程序中,我们在启动时打开连接并保持打开状态,直到应用程序关闭。几乎应用程序中的每个用户交互都需要数据库,并且保持连接打开比按需打开和关闭要快。

所有数据更新都在事务中执行。我们Commit使用CommitMode.Immediate选项的交易。这可确保数据更改立即刷新到文件中,从而最大限度地减少数据丢失的可能性。

2

这真的取决于。为了提高性能,如果始终存在与数据库的实时连接,则SQL CE效果最佳,因为每次连接时引擎都不必构建所有内容。

然而,只有一个连接会导致数据缓存到文件,并且在发生灾难性故障时数据丢失或损坏的可能性较高。

我倾向于在应用程序启动时打开与数据库的“虚拟”连接,并且该连接始终打开,但很少或从未实际使用过。如果你愿意的话,这可以使发动机“准备就绪”。对于实际的数据访问,我使用单独的连接并根据我正在进行的活动来管理状态,通常将其保留在多个查询中(假如您愿意,则为伪事务),但不会将其无限期打开。

+0

您可以通过两种方式更改惰性冲洗行为。当你在'SqlCeTransaction'上调用'Commit'时,你可以'CommitMode.Immediate'立即刷新事务(http://msdn.microsoft.com/en-US/library/esdw1h9d.aspx)。连接字符串上还有一个'flush interval'选项(http://msdn.microsoft.com/zh-cn/library/system.data.sqlserverce.sqlceconnection.connectionstring.aspx)。 – 2010-03-11 21:34:16

+0

你是什么意思的“准备”? – pdiddy 2010-03-11 22:22:31

+1

我在找这方面的任何公开文档,但我能找到的是来自SQL CE团队开发人员的私人电子邮件。基本上,到数据库的第一个连接在内部初始化一些对象,而其他每个连接都使用这些对象。创建并保持一个连接会建立这些对象以供所有后续连接使用(从而提高性能)。 – ctacke 2010-03-11 22:25:01