Медленное Свойство Applicationsettingsbase
Механизм настройки приложений (производный от ApplicationSettingsBase), по-видимому, является реальным узким местом при использовании в многопоточных сценариях. Особенно, когда свойства запрашиваются часто, параллелизм, который они вводят, замедляет мои циклы. Мне нравится использовать их в любом случае, чтобы иметь те хорошие опции конфигурации приложений. Но, может быть, мне нужно завернуть их в свой собственный тайник или что-то в этом роде?
У кого-нибудь есть такая же проблема? Я что-то упустил? Я подумал, что заявки на создание базы данных кэширует ли уже все настройки? Почему кажется, что он вообще блокирует доступ из нескольких потоков? Что может быть общим обходным путем?
2 ответа:
Я не вижу ничего странного в наличии потокобезопасных настроек mechanismm? Если это замедляет ваши hihgly параллельные theads вниз, вы должны попытаться использовать локальные переменные istead запроса getsetting fast снова. Я думаю, что редизайн вашего механизма запроса настроек значительно улучшит производительность.
Я бы действительно предложил обернуть любую функциональность "get settings" в объект и спрятать ее за интерфейсом. Мы сильно набираем это, поэтому у нас есть:
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, который делает очевидное.