当在多线程场景中使用时,应用程序设置机制(源自ApplicationSettingsBase)似乎是一个真正的瓶颈。特别是,当经常查询属性时,它们引入的并发性会减慢我的循环速度。无论如何,我喜欢使用它们来获得那些很好的应用程序配置选项。但是也许我需要把它们包装到我自己的缓存中呢?
有没有人有同样的问题?我是不是遗漏了什么?我想,ApplicationSettingsBase已经缓存了所有设置了吗?为什么它看起来会锁定来自多个线程的访问呢?常见的解决方法是什么?
发布于 2012-02-25 23:44:21
我看不出有什么奇怪的线程安全设置机制?如果这会减慢你的高并发theads,你应该尝试使用局部变量,而不是再次快速查询getsetting。我认为重新设计设置请求机制会对性能有很大帮助。
发布于 2011-12-20 07:23:08
我真的建议将任何类型的“获取设置”功能包装在一个对象中,并将其隐藏在一个接口后面。我们强类型这个,所以我们有:
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类。
https://stackoverflow.com/questions/5501801
复制相似问题