C# .NET直接在属性中获取和设置注册表键值

C# .NET直接在属性中获取和设置注册表键值,c#,properties,registry,C#,Properties,Registry,我直接在属性中获取并设置注册表项的值。程序启动时钥匙打开,退出时钥匙关闭 public bool AlwaysSyncBeforeRun { get{ return Convert.ToBoolean(MayaRegistryKey.GetValue("AlwaysSyncBeforeRun")); } set { MayaRegistryKey.SetValue("AlwaysSyncBeforeRun", value); } } 此属

我直接在属性中获取并设置注册表项的值。程序启动时钥匙打开,退出时钥匙关闭

    public bool AlwaysSyncBeforeRun
    {
        get{ return Convert.ToBoolean(MayaRegistryKey.GetValue("AlwaysSyncBeforeRun")); }
        set { MayaRegistryKey.SetValue("AlwaysSyncBeforeRun", value); }
    }
此属性不适合频繁使用


这是一个好主意吗?

如果不是为了经常使用,为什么要打开它


你这样做是为了提高性能。但是,在你的情况下,你不经常使用它。所以,我建议您可以打开键,读/写值,然后关闭它。它将是安全的。

许多人说,你不应该在一个属性中有任何功能


当您的程序打开对注册表项的引用时,您是否尝试过编辑注册表项?我没有尝试过,但是如果你的应用程序在运行期间锁定了该项,那么最好读取该项,存储它并在最后更新它。

我认为这不是一个好主意,因为使用你的类的开发人员可能不知道该属性内部发生了什么,并且注册表访问具有安全性影响。如果使用您的类的应用程序没有注册表访问权限,则对该属性执行简单的get操作将导致异常

对于这种情况,我最好使用该属性将值存储在内存中,并提供一些Load()方法来填充该属性和Save()方法,只要应用程序准备好保存到注册表,就可以调用该方法


来自.NET Framework设计指南的此链接可能会提供额外的上下文:

如果只是更改值和触发事件,那么在属性中具有功能就可以了。一旦你循环,创建文件。。。在一家房地产公司,这是个坏主意。在这种情况下,我认为没有性能方面的原因。我知道,这很可能会引发异常。我的程序被设置为只在自身的实例上运行,所以这是非常安全的。好的编程约定会建议我在那里设置检查。我之所以保持打开状态,是因为我使用同一个键来存储多个设置。是的,你的建议很有意义。它不仅更安全,而且更快。但是,如果程序未正确关闭,用户可能会丢失设置。同意,但在这种情况下,最好的选择是使用一个良好的全局异常处理程序,在关闭应用程序之前,始终保存所有设置。这类似于在Windows窗体中使用该类。无论如何,你无法阻止所有可能的坏情况。链接已断开