C# Windows窗体中的全局配置
我正在使用windows窗体创建客户端服务器应用程序。所有应用程序配置都保存在数据库表中,名为configuration,并且有一个接口来更改其值。在事务中使用的配置表中有一些记录,例如“日志激活”。如果日志激活的此值为true,则在保存事务时,它将创建一个日志文件 因此,每次保存事务时,我总是将日志激活配置读取到数据库以获取其值。在我的情况下,我不仅可以读取1个配置,还可以读取1个或更多配置。我担心的是,要获得每个配置值,会有很多数据库往返,这在客户机-服务器体系结构中不是很好的设计 然后我尝试使用设置文件,但这种方法不适合我的应用程序,因为我使用Windows窗体开发客户机-服务器应用程序。每次我更新设置文件中的值时,它仅在该计算机中受影响,而其他计算机不受影响C# Windows窗体中的全局配置,c#,winforms,C#,Winforms,我正在使用windows窗体创建客户端服务器应用程序。所有应用程序配置都保存在数据库表中,名为configuration,并且有一个接口来更改其值。在事务中使用的配置表中有一些记录,例如“日志激活”。如果日志激活的此值为true,则在保存事务时,它将创建一个日志文件 因此,每次保存事务时,我总是将日志激活配置读取到数据库以获取其值。在我的情况下,我不仅可以读取1个配置,还可以读取1个或更多配置。我担心的是,要获得每个配置值,会有很多数据库往返,这在客户机-服务器体系结构中不是很好的设计 然后我尝
那么,解决这个问题的最佳解决方案是什么,而不是在每个事务中直接读取数据库?这实际上取决于配置机制的工作方式。当前配置值是否应在所有情况下使用,或者在重新启动应用程序后足以检测配置更改 在第一种情况下,您需要在需要之前读取所需的值,就像现在一样 在第二种情况下,创建一个公共静态类就足够了,该类每个设置有一个成员,并且能够在应用程序启动时设置一个新值和读取所有值。正如我所说的,缺点是在所有客户端重新启动之前不会应用设置 后者的示例类:
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分钟以不干扰正在运行的事务的方式。