Saya pikir objek statis dibagikan ke beberapa utas. Namun, saya mendapat masalah CPU yang tinggi di salah satu situs saya, jadi saya mengambil dump windbg dan sangat terkejut, saya melihat ini:
Kita dapat melihat bahwa ada 10 instance dari kelas yang disebut ConnectionMultiplexer. Tapi kode saya membuat ConnectionMultiplexer sebagai objek statis. Artinya, hanya satu instance yang dibuat untuk semua thread. Jadi kenapa windbg menampilkan banyak contoh?
Ini adalah kode saya untuk membuat koneksi 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);
}