Como rastrear mudanças no tamanho de um determinado arquivo no Windows?

0

Eu quero monitorar o tempo em que o tamanho de um arquivo de log do banco de dados SQL, databaseName.ldf , muda para que eu possa compará-lo com o tempo em que as consultas SQL foram executadas para determinar quais consultas / comportamentos SQL têm o maior efeito no tamanho dos meus arquivos databaseName.ldf .

Eu tentei ferramentas de terceiros como Size Matters e Folder Changes View , mas o problema é que eles registram apenas as alterações mais recentes. Eu queria ver todas as alterações no tamanho do arquivo ao longo do tempo.

Eu preferiria se ele usasse o método sem pesquisa ou fosse acionado por eventos.

    
por Mark 28.08.2017 / 11:32

1 resposta

1

O SysInternals Process Monitor pode ser útil com os seguintes filtros:

  • Caminho: databaseName.ldf (prefira o caminho completo, se possível)
  • Operação: WriteFile

Quando o teste terminar, você poderá salvá-lo como CSV ou XML para sua avaliação. Infelizmente, o tamanho do arquivo está na coluna de detalhes, que é uma coluna de texto que inclui outras coisas que não são interessantes para você. Como os arquivos de log provavelmente são anexados, você precisa calcular o comprimento total sozinho (deslocamento + comprimento).


ComalgumashabilidadesdecodificaçãoemC#,vocêpodeusaro FileSystemWatcher . Benefício: você pode fazer o login no formato mais adequado para você. Desvantagem: código Spaghetti potencialmente não testado que pode ter erros.

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);
                }
            }
        }
    }
}
    
por 28.08.2017 / 11:53