¿Cuál es la forma correcta de monitorear el uso de memoria de la aplicación?

Para fines de depuración, he escrito este pequeño método estático:

public static long CheckMemory(long maxMemorySizeBytes)
{
    GC.Collect();
    GC.WaitForPendingFinalizers();
    GC.Collect();

    var usedMemoryBytes = Process.GetCurrentProcess().VirtualMemorySize64;
    if (usedMemoryBytes > maxMemorySizeBytes)
        Debugger.Break();

    return usedMemoryBytes;
}

Por alguna razón,VirtualMemorySize64 sigue devolviendo mucha más memoria de la que muestra la ventana Herramientas de diagnóstico de Visual Studio, así como lo que muestra el Administrador de tareas. Para el ejemplo específico que estoy ejecutando ahora, aquí están los números:

Herramientas de diagnóstico: ~ 250 MBAdministrador de tareas: ~ 120 MBVirtualMemorySize64: ~ 1100 MB

¿Por qué hay diferencias tan grandes y cómo hago un seguimiento adecuado del uso de la memoria desde la propia aplicación?

Respuestas a la pregunta(1)

Su respuesta a la pregunta