¿Cómo realizar un seguimiento de los cambios de tamaño de un determinado archivo en Windows?

¿Cómo realizar un seguimiento de los cambios de tamaño de un determinado archivo en Windows?

Quiero monitorear el momento en que databaseName.ldfcambia el tamaño de un archivo de registro de base de datos SQL para poder compararlo con el momento en que se ejecutaron las consultas SQL para determinar qué consultas/comportamiento SQL tienen el mayor efecto en el tamaño de mi databaseName.ldfarchivos.

Probé herramientas de terceros comoEl tamaño importayVista de cambios de carpetapero el problema fue que solo registraron el último cambio. Quería ver todos los cambios en el tamaño del archivo a lo largo del tiempo.

Preferiría que utilizara un método sin sondeo o que se activara por eventos.

Respuesta1

Monitor de procesos SysInternalsPuede ser útil con los siguientes filtros:

  • Ruta: databaseName.ldf(prefiera la ruta completa si es posible)
  • Operación:WriteFile

Una vez finalizada la prueba, puede guardarla como CSV o XML para su evaluación. Desafortunadamente, el tamaño del archivo está en la columna de detalles, que es una columna de texto que incluye otras cosas que no son de su interés. Dado que es probable que se agreguen archivos de registro, usted mismo debe calcular la longitud total (desplazamiento + longitud).

Captura de pantalla de un archivo de registro hipotético


Con algunas habilidades de codificación en C#, puedes usar elVigilante del sistema de archivos. Beneficio: puedes iniciar sesión en el formato que más te convenga. Desventaja: código Spaghetti potencialmente no probado que podría tener errores.

using System;
using System.IO;

namespace FileSizeChangeLogger
{
    static class Program
    {
        static long lastSize;
        static FileInfo file = new FileInfo(@"D:\temp\myfilename.txt");

        static void Main()
        {
            lastSize = file.Length;

            var watcher = new FileSystemWatcher {Path = file.DirectoryName};
            watcher.Changed += OnFileChange;

            while (true)
            {
                watcher.WaitForChanged(WatcherChangeTypes.Changed);
            }
        }

        private static void OnFileChange(object sender, FileSystemEventArgs e)
        {
            if (e.FullPath.Equals(file.FullName, StringComparison.InvariantCultureIgnoreCase))
            {
                file.Refresh();
                var newSize = file.Length;
                if (newSize != lastSize)
                {
                    Console.WriteLine(file.Length);
                }
            }
        }
    }
}

información relacionada