C# Windows窗体中的全局配置

C# Windows窗体中的全局配置,c#,winforms,C#,Winforms,我正在使用windows窗体创建客户端服务器应用程序。所有应用程序配置都保存在数据库表中,名为configuration,并且有一个接口来更改其值。在事务中使用的配置表中有一些记录,例如“日志激活”。如果日志激活的此值为true,则在保存事务时,它将创建一个日志文件 因此,每次保存事务时,我总是将日志激活配置读取到数据库以获取其值。在我的情况下,我不仅可以读取1个配置,还可以读取1个或更多配置。我担心的是,要获得每个配置值,会有很多数据库往返,这在客户机-服务器体系结构中不是很好的设计 然后我尝

我正在使用windows窗体创建客户端服务器应用程序。所有应用程序配置都保存在数据库表中,名为configuration,并且有一个接口来更改其值。在事务中使用的配置表中有一些记录,例如“日志激活”。如果日志激活的此值为true,则在保存事务时,它将创建一个日志文件

因此,每次保存事务时,我总是将日志激活配置读取到数据库以获取其值。在我的情况下,我不仅可以读取1个配置,还可以读取1个或更多配置。我担心的是,要获得每个配置值,会有很多数据库往返,这在客户机-服务器体系结构中不是很好的设计

然后我尝试使用设置文件,但这种方法不适合我的应用程序,因为我使用Windows窗体开发客户机-服务器应用程序。每次我更新设置文件中的值时,它仅在该计算机中受影响,而其他计算机不受影响


那么,解决这个问题的最佳解决方案是什么,而不是在每个事务中直接读取数据库?

这实际上取决于配置机制的工作方式。当前配置值是否应在所有情况下使用,或者在重新启动应用程序后足以检测配置更改

在第一种情况下,您需要在需要之前读取所需的值,就像现在一样

在第二种情况下,创建一个公共静态类就足够了,该类每个设置有一个成员,并且能够在应用程序启动时设置一个新值和读取所有值。正如我所说的,缺点是在所有客户端重新启动之前不会应用设置

后者的示例类:

public static final class Configuration
{
    private static string m_setting1;
    private static bool m_setting2;

    static Configuration()
    {
        // Read all settings
        ...
    }

    public static string Setting1
    {
        get { return m_setting1; }
        set
        {
            if (!m_setting1.Equals(value))
            {
                m_setting1 = value;
                StoreSettings();
            }
        }
    }

    public static bool Setting2
    {
        get { rteurn m_setting2; }
        set
        {
            if (!m_setting2 == value)
            {
                m_setting2 = value;
                StoreSettings();
            }
        }
    }

我喜欢你的例子,StoreSettings使用了什么?关于缺点,您的意思是在客户端打开的应用程序应该重新打开吗?由于有许多客户端,我需要做额外的工作来通知并确保所有客户端重新启动
StoreSettings
,这将是您实现的将设置保存到数据库中的方法。我所说的缺点是,如果您只在应用程序启动时读取设置,当然无法知道设置是否已更改。在不重新启动客户端的情况下传播新设置的一种方法是让
Configuration
类在给定的时间间隔内重新读取设置,例如每隔15分钟以不干扰正在运行的事务的方式。