Как отслеживать изменения размера определенного файла в Windows?

Я хочу контролировать время, когда размер файла журнала базы данных SQL,databaseName.ldf изменения, так что я могу сравнить его со временем, что SQL запросы были выполнены на для того, чтобы определить, какие SQL запросы / поведение имеет наибольшее влияние на размер моего databaseName.ldf файлы.

Я пробовал сторонние инструменты, такие как Размер Имеет Значение и Папка Меняет Вид но проблема была в том, что они только последние изменения. Я хотел увидеть все изменения в размере файла со временем.

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

14
задан Mark
07.03.2023 16:51 Количество просмотров материала 2683
Распечатать страницу

1 ответ

Монитор Процесса SysInternals может быть полезно со следующими фильтрами:

  • путь: databaseName.ldf (по возможности предпочитайте полный путь)
  • работы: WriteFile

после того, как ваш тест закончен, вы можете сохранить его в формате CSV или XML для оценки. К сожалению, размер файла находится в столбце detail, который представляет собой текстовый столбец, который включает в себя другие вещи, которые вам не интересны. Поскольку файлы журнала, скорее всего, добавляются, необходимо рассчитайте общую длину самостоятельно (смещение + длина).

Screenshot of a hypothetical log file



С некоторыми навыками кодирования c#, вы можете использовать FileSystemWatcher. Преимущество: вы можете войти в формат, который лучше всего подходит для вас. Недостаток: потенциально не протестированный код спагетти, который может содержать ошибки.

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);
                }
            }
        }
    }
}
1
отвечен Thomas Weller 2023-03-09 00:39

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх