Блокировка C # в синглтоне, вызывающая высокую загрузку ЦП, когда IIS перезапускает пул приложений?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Блокировка C # в синглтоне, вызывающая высокую загрузку ЦП, когда IIS перезапускает пул приложений?

Сообщение Anonymous »

У меня есть одноэлементный класс CacheManager, который обрабатывает и хранит список Store.
Получая определенное хранилище через CacheManager.Instance.GetStore, я затем могу читать или сохранять значения. p>
Этот код предназначен для веб-приложения, работающего в IIS, и с тех пор, как я выпустил эту штуку, я заметил некоторые случайные всплески высокой загрузки ЦП, и каждый раз это начинается в то же самое время, когда IIS повторно загружает мой пул приложений. Однако не всегда, только иногда.
Примерно через 30-60 минут все возвращается в норму (может быть, IIS убивает проблемный пул?) p>
Я уверен, что это не что-то другое, использующее ЦП, я использовал окно PerformanceMonitor, чтобы отслеживать, что это за процесс, а это w3wp.exe (то есть пулы приложений IIS)Вопрос в том, действительно ли этот код может вызвать какой-либо блок?
Заметили ли вы какие-то проблемы с ним?

Код: Выделить всё

public sealed class CacheManager
{
//SINGLETON STRUCTURE
private CacheManager() { }
public static CacheManager Instance { get; } = new CacheManager();

//CLASS IMPLEMENTATION
private Dictionary stores = new Dictionary();

public Store GetStore(string storeKey)
{
if (stores.ContainsKey(storeKey) == false)
stores[storeKey] = new Store(storeKey);

if (stores[storeKey] is Store == false)
throw new InvalidCastException($"Errore cast: la tipizzazione di lettura non corrisponde a quella dello store già esistente registrato con la chiave {storeKey}");

return (Store)stores[storeKey];
}
}

public sealed class Store
{
private readonly Dictionary _cache = new Dictionary();
private readonly object _lock = new object();
private TimeSpan _defaultExpiration = TimeSpan.FromMinutes(30);
public readonly string Name;

internal Store(string name)
{
this.Name = name;
}

public bool TryGetValue(TKey key, out TValue value)
{
lock (_lock)
{
if (_cache.TryGetValue(key, out CacheItem cacheItem))
{
if (!cacheItem.IsExpired())
{
value = cacheItem.Value;
return true;
}
else
{
this.Remove(key);
}
}

value = default;
return false;
}
}

public Store SetExpiration(long seconds)
{
lock (_lock)
{
this._defaultExpiration = TimeSpan.FromSeconds(seconds);
return this;
}
}

public void AddOrUpdate(TKey key, TValue value, TimeSpan? expiration = null)
{
lock (_lock)
{
var expirationTime = expiration ?? _defaultExpiration;
_cache[key] = new CacheItem(value, DateTime.Now.Add(expirationTime));
}
}
Я выполнил откат, поэтому сейчас запускаю веб-приложение без этого кода, и проблема пока не повторилась.
Также я знаю, что приведенные выше классы не реализуют какую-либо систему сохранения данных между повторными циклами, но сейчас мне это не нужно.

Подробнее здесь: https://stackoverflow.com/questions/787 ... ication-po
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Олицетворение IIS не работает, когда пул приложений запускается с учетной записью домена
    Anonymous » » в форуме C#
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Пул приложений IIS зависает на сайте PHP
    Anonymous » » в форуме Php
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Пул приложений IIS зависает на сайте PHP
    Anonymous » » в форуме Php
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • IIS подражание не работает, когда пул приложений работает с доменной учетной записью
    Anonymous » » в форуме C#
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Почему глобальная блокировка работает лучше, чем общая блокировка заказа в этом эталоне параллелизма?
    Anonymous » » в форуме C++
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»