Я думаю, что статический объект используется в нескольких потоках. Однако у меня возникла проблема с высокой загрузкой процессора на одном из моих сайтов, поэтому я сделал дамп windbg и очень удивился, я увидел следующее:
Мы видим, что существует 10 экземпляров класса ConnectionMultiplexer. Но мой код создает ConnectionMultiplexer как статический объект. Это должно означать, что для всех потоков будет создан только один экземпляр. Так почему же windbg показывает несколько экземпляров?
Это мой код для создания соединения Redis
public static class CacheConnection
{
private static StackExchangeRedisCacheClient _newconnectionDb;
public static StackExchangeRedisCacheClient NewConnectionDb
=> _newconnectionDb ?? (_newconnectionDb = NewRedisConnection());
private static IDatabase _connectionDb;
public static IDatabase ConnectionDb => _connectionDb ?? (_connectionDb = RedisConnection());
private static StackExchangeRedisCacheClient NewRedisConnection()
{
var serializer = new NewtonsoftSerializer();
return new StackExchangeRedisCacheClient(Connection, serializer);
}
private static IDatabase RedisConnection()
{
var cacheDatabase = Connection.GetDatabase();
return cacheDatabase;
}
public static ConnectionMultiplexer Connection => LazyConnection.Value;
private static readonly Lazy<ConnectionMultiplexer> LazyConnection = new Lazy<ConnectionMultiplexer>(() => ConnectionMultiplexer.Connect(
System.Configuration.ConfigurationManager.AppSettings["CacheConnectionString"]), LazyThreadSafetyMode.PublicationOnly);
}