Я просматриваю какой-то очень старый код, пытаясь выяснить причину долгосрочной проблемы, из-за которой я могу сказать, что утечка памяти на сервере.
Я не могуоберните мою голову вокруг того, что происходит в этом методе, но подозреваю, что GC.SurpressFinalise()
может вызывать проблемы, не высвобождающие часть памяти. Может ли это быть так?
public class DistributedLock : IDisposable
{
private IRedLock Lock { get; }
private bool Disposed { get; set; }
public bool Acquired => Lock.IsAcquired;
public DistributedLock(string lockKey, TimeSpan expiry)
{
Disposed = false;
var conn = RedLockController.GetConnection();
Lock = conn.CreateLock(lockKey, expiry);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
~DistributedLock()
{
Dispose(false);
}
protected virtual void Dispose(bool disposing)
{
if (Disposed) return;
if (disposing)
{
Lock.Dispose();
}
Disposed = true;
}
}