Sobes.tech
Junior — Middle

Használta nem kezelhető erőforrásokat C#-ban történő fejlesztés során?

sobes.tech MI

Válasz az MI-től

Igen, C#-ban, amikor nem kezelt erőforrásokkal dolgozik, például fájldeskriptorokkal, adatbázis-kapcsolatokkal vagy memória mutatókkal, fontos ezeket az erőforrásokat helyesen felszabadítani, hogy elkerüljük a memória szivárgásokat és más problémákat. Ehhez általában az IDisposable interfészt és a Dispose() metódust implementálják, ahol a nem kezelt erőforrásokat felszabadítják.

Példa:

class UnmanagedResourceHolder : IDisposable
{
    private IntPtr unmanagedPointer; // nem kezelt erőforrás
    private bool disposed = false;

    public UnmanagedResourceHolder()
    {
        // nem kezelt erőforrás lefoglalása
        unmanagedPointer = /* API hívás */ IntPtr.Zero;
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (!disposed)
        {
            if (unmanagedPointer != IntPtr.Zero)
            {
                // nem kezelt erőforrás felszabadítása
                // például natív API hívás
                unmanagedPointer = IntPtr.Zero;
            }
            disposed = true;
        }
    }

    ~UnmanagedResourceHolder()
    {
        Dispose(false);
    }
}

Így a nem kezelt erőforrások felszabadítása kézi ellenőrzés alatt áll, ami megakadályozza a szivárgásokat.