慢ApplicationSettingsBase

时间:2011-03-31 14:53:07

标签: c# concurrency application-settings

应用程序设置机制(派生自ApplicationSettingsBase)在多线程场景中使用时似乎是一个真正的瓶颈。特别是,当经常查询属性时,它们引入的并发性会减慢我的循环。无论如何我喜欢使用它们来获得那些不错的应用程序配置选项。但也许我需要将它们包装到我自己的缓存中呢?

是否有同样的问题?我错过了什么吗?我想,ApplicationSettingsBase是否已经缓存了所有设置?为什么它似乎从多个线程锁定访问?什么是常见的解决方法?

2 个答案:

答案 0 :(得分:2)

我真的建议在对象中包装任何类型的“获取设置”功能并将其隐藏在界面后面。我们强烈打字,所以我们有:

public class Worker 
{
    private readonly ISettings settings;
    public Worker (ISettings settings)
    {
        this.settings = settings;
    }

    public void Work ()
    {
        for (int i = 0; i < settings.MaxWorkerIterations (); i++)
        { ... }
    }
}

public interface ISettings
{
    int MaxWorkerIterations ();
}

public class AppConfigSettings
{
    public int MaxWorkerIterations ()
    {
        return (int) ApplicationSettings["MaxWorkerIterations"];
    }
}

这具有(主要)编译时检查和易测试性的好处。您还可以将AppConfigSettings类重写为CachingAppConfigSettings类,以实现显而易见的目的。

答案 1 :(得分:2)

在使用线程安全设置机制时,我没有看到任何奇怪的东西?如果它使你的高速并发theads减慢,你应该尝试使用局部变量而不是再次快速查询getsetting。我认为重新设计您的设置请求机制将有助于大大提高性能。