【问题标题】:A question about program design关于程序设计的问题
【发布时间】:2010-12-08 18:54:30
【问题描述】:

我正在开发一个 Windows Mobile WinForm 应用程序,它使用带有 .NET Compact Framework 2.0 SP2 和 C# 的 Sql Server CE 3.1。

我有一个具有 SqlCeConnection 对象的表单,在它的所有执行时间内打开:我在启动时打开连接并在事件关闭时关闭它。

我还有一个类来读取 Sql Server CE 数据库。

我的问题是关于性能的:这两种情况哪一种最好?

1.当我创建一个 reader 类的对象时,将 SqlCeConnection 对象传递给构造函数并将其作为属性保存到这个新对象中。

2. 总是,当我调用这个读取器类的方法时,将 SqlCeConnection 对象作为参数传递。

我想如果我使用情况 1,我有两个 SqlCeConnection 对象,不是吗?

如果您需要更多详细信息,请告诉我。

谢谢!

【问题讨论】:

    标签: c# windows-mobile sql-server-ce


    【解决方案1】:

    首先回答你的最后一个问题,不,在场景 1 中你不会有两个不同的连接。你传入的 SqlCeConnection 是一个引用,所以表单和阅读器类都引用了同一个底层连接对象.

    我实际上不认为这两种情况有很大的不同。由于您在表单的生命周期内保持连接打开,因此将它传递到此辅助类的构造函数中或为每个方法传递它实际上并不重要。所以我想只做场景1会更容易,因为每次调用的参数列表更小。

    如果您想尽量缩短连接的生命周期,这将很重要。例如,在连接到普通 SQL Server 的 Windows 桌面应用程序中,您不会真的希望在表单的生命周期内保持打开的连接,因为如果很多人打开很多表单,您就会遇到性能问题你的服务器。因此,在这种情况下,您将在最后一秒创建连接,将其传递给您的阅读器例程以获取数据并立即关闭它。在这种情况下,场景 2 对您来说会更好。

    但在移动应用程序中,这种情况对您来说似乎并不重要。您可能是唯一一个连接到数据库的人,因此您是否保持连接打开并不重要。

    【讨论】:

    • 我在某处读到,如果我想要更好的性能,最好保持打开连接。
    • 我怀疑你会看到任何可衡量的性能差异。在完整的 SQL Server 环境中,如果所有客户端都打开大量连接,您绝对需要担心性能下降。
    • 是的,但这是单用户场景。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多