GC.SuppressFinalize вызывает утечку памяти в этом коде? - PullRequest
0 голосов
/ 21 октября 2019

Я просматриваю какой-то очень старый код, пытаясь выяснить причину долгосрочной проблемы, из-за которой я могу сказать, что утечка памяти на сервере.

Я не могуоберните мою голову вокруг того, что происходит в этом методе, но подозреваю, что 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...