CodingIsDreamy Ответов: 2

Почему мой filesystemwatcher использует так много ресурсов процессора? Vb.net


Привет всем это, вероятно, мой последний вопрос здесь, так как я многому научился на этом сайте относительно vb.net-есть только одна вещь, которую я, кажется, могу понять. Мой filesystemwatcher использует примерно 50-процентную загрузку процессора, и мне было интересно, может ли кто-нибудь отредактировать мой код, чтобы изменить использование (более низкое использование процессора), а также сказать мне, почему оно так высоко. Спасибо

вот код, помните, что это всего лишь один, даже у меня есть любое событие для переименования, создания, изменения, удаления :::

Private Sub FileSystemWatcher1_Renamed(ByVal sender As System.Object, ByVal e As System.IO.RenamedEventArgs) Handles FileSystemWatcher1.Renamed
       Dim OpenFileDialog3 As String
       Try
           Detect.Labellastreal.Text = e.FullPath
           ListBox3.Items.Add(Detect.Labellastreal.Text)
           OpenFileDialog3 = ""


           Dim md5 As New MD5CryptoServiceProvider
           Dim f As New FileStream(e.FullPath, FileMode.Open, FileAccess.Read, FileShare.Read, &H2000)
           md5.ComputeHash(f)
           Dim hash As Byte() = md5.Hash
           Dim buff As New StringBuilder
           Dim hashByte As Byte
           For Each hashByte In hash
               buff.Append(String.Format("{0:X2}", hashByte))
           Next
           f.Close()
           If My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\Database\UnwantedProgs.txt").Contains(buff.ToString) Then
               OpenFileDialog3 = e.FullPath
               File.Move(Detect.Labellastreal.Text, Path.Combine("C:\ProgramData\DreamyTS\Infected\", Path.GetFileName(Detect.Labellastreal.Text)))
               Detect.ShowDialog()

               WriteToLog("Unwanted Program detected")
           End If

       Catch exception1 As Exception
           ProjectData.SetProjectError(exception1)
           Dim ex As Exception = exception1
           ProjectData.ClearProjectError()
       End Try
   End Sub


Все это работает просто высокая загрузка процессора

Что я уже пробовал:

я действительно не знаю, что делать, чтобы быть честным...

Mehdi Gholam

Попробуйте прокомментировать свой код и увидеть разницу.

CodingIsDreamy

мой код находится выше

Mrunal Sonawane

xD

CodingIsDreamy

я не понимаю, что вы имеете в виду?

Mrunal Sonawane

Он говорит, что поместите свой код в комментарий...
- Это комментарий... Лол

Mehdi Gholam

Очевидно, что код потребляет циклы процессора, прокомментируйте их, чтобы увидеть, где он находится.

CodingIsDreamy

Private Sub FileSystemWatcher1_Renamed(ByVal sender As System.Object, ByVal e As System.IO.RenamedEventArgs) обрабатывает FileSystemWatcher1.Renamed
Dim OpenFileDialog3 Как Строка
Попробуй
Обнаружить.Labellastreal.Текст = е.Полный путь
ListBox3.Предметы.Добавить(Detect.Labellastreal.Текст)
OpenFileDialog3 = ""


Dim md5 как новый MD5CryptoServiceProvider
Дим F как новый файловый поток(Эл.Полный Путь, Содержит Filemode.Открой, FileAccess.Читай, Файлообменник.Читать, &H2000)
алгоритма MD5.Метода computehash(Ф)
Dim hash As Byte() = md5.Hash
Тусклый бафф как новый строитель струн
Dim hashByte As Byte
Для каждого хэшбайта в хэше
полировать.Append(Строка.Формат("{0:X2}", хэшбайт))
Следующий
Ф.Рядом()
Если Мой ... Компьютер.Файловая Система.ReadAllText(Приложение.StartupPath & "\Database\UnwantedProgs.txt").Содержит(бафф.Метод toString) Затем
OpenFileDialog3 = е.Полный путь
Файл.Переместить(Обнаружить.Labellastreal.Текст, Путь.Комбайн("C:\ProgramData\DreamyTS\Infected\", Path.GetFileName(Detect.Labellastreal.Текст)))
Обнаружить.Метод showdialog()

WriteToLog("обнаружена нежелательная программа")
Конец, Если

Поймать исключение 1 как исключение
В статье projectdata.SetProjectError(исключение 1)
Dim ex как исключение = exception1
В статье projectdata.ClearProjectError()
Конец Попытки
Конец Подводной Лодки

Mrunal Sonawane

Да, конечно, он использует процессор... но комментировать это не очень хороший выбор... Это создаст больше ошибок, чем исправит их...

CodingIsDreamy

о, не могли бы вы исправить это для меня и рядом с исправлением объяснить, что я сделал не так?

CodingIsDreamy

или пример или что-то еще

Mrunal Sonawane

Для каждого хэшбайта в хэше
полировать.Append(Строка.Формат("{0:X2}", хэшбайт))
Нить.Сон(500)
Следующий
...
Может быть, попробуем вот это

Mrunal Sonawane

измените эти строки в своем коде

CodingIsDreamy

хорошо две секунды :-)

CodingIsDreamy

ладно я попробую сейчас :-)

Mrunal Sonawane

Конечно... Дайте мне знать...

CodingIsDreamy

ты это имеешь в виду? потому что чувак если нет то я запутался :-)

Dave Kreskowiak

Что у вас есть FileSystemWatcher смотреть? Вы заставили его смотреть всю дорогу?

CodingIsDreamy

да чувак с:\

Dave Kreskowiak

Вот тут-то и возникает твоя проблема. Смотрите мое решение ниже.

CodingIsDreamy

ладно круто

CodingIsDreamy

где ждать? у того другого чувака был оунсер, который очень помог, просто сказав всем, кто читает, чтобы перейти прямо к вашему, и его оунсер

2 Ответов

Рейтинг:
5

Mrunal Sonawane

Не уверен, но попробуйте добавить поток сна в цикл... Например, 500 мс
Попробуйте это и скажите мне, если это работает


CodingIsDreamy

куда мне его добавить? Пример?

Mrunal Sonawane

Для каждого хэшбайта в хэше
полировать.Append(Строка.Формат("{0:X2}", хэшбайт))
Нить.Сон(500)
Следующий

CodingIsDreamy

ну чувак это немного убрало его но не сильно повлияло на то что я видел :-)

Mrunal Sonawane

Хмм...

Mrunal Sonawane

Размышляющий...

CodingIsDreamy

нет проблем Чувак я просто рад что ты помогаешь :-)

Mrunal Sonawane

Не волнуйся, брат... Кодирование - это действительно интересно... И пытаться решать проблемы, связанные с этим, приятно!
Ну, вы можете попробовать увеличить время сна потока... чтобы понравиться 1000 или 2000 или даже больше... Может быть, это поможет... Пожалуйста дайте мне знать
На самом деле все дело в том, что функция выполняет большую работу... Создание объектов, чтение файлов, хэширование и т. д... Что добавляет к использованию... Ну, попробуйте увеличить время и скажите мне, если это вообще что-нибудь даст...

CodingIsDreamy

ладно чувак ура извини за поздний ответ готовил кофе :-)

Mrunal Sonawane

Нет проблем, братан! :Д

CodingIsDreamy

:-)

CodingIsDreamy

по вашему мнению, это 30% использования процессора много?

CodingIsDreamy

теперь его использование процессора составляет 30%, так что это помогло! :-)

CodingIsDreamy

Кроме того, чувак, могу ли я захватить твою электронную почту просто в будущем, когда мне понадобится помощь с крошечной ошибкой, которую я не должен, но могу? Это просто somthimes когда я спрашиваю других людей чувак они просто говорят что я не умею кодировать и все такое но это просто я больше привык к другим языкам программирования

CodingIsDreamy

лол спас чувака

Mrunal Sonawane

Лол, здорово... Я мог бы занять некоторое время, чтобы ответить по почте, но я всегда проверяю свою почту, так что не стесняйтесь присылать мне любые проблемы, с которыми вы сталкиваетесь! Всегда рад помочь! :Д

CodingIsDreamy

Спасибо мужик:-)

Mrunal Sonawane

Не беспокойтесь :D

CodingIsDreamy

Вы работаете на многих языках программирования? или просто .net? просто интересно, потому что я встречал здесь некоторых людей, которые каким-то образом любят нагрузку языков программирования, но вы единственный, кто должным образом заботится о коде, например, просто кажется, что любит код :-)

Рейтинг:
14

Dave Kreskowiak

ЖКС не сидеть и ждать событий от файловой системы NTFS. Таких событий не бывает. Так как же FSW получает изменения в файловой системе?

Голосование.

В принципе, FSW идет в каждый каталог и подкаталог, который ему говорят смотреть, и захватывает список файлов для них. Он зовет Функция ReadDirectoryChangesW (Windows)[^] по каждому каталогу строится база данных о том, что Функция ReadDirectoryChangesW (Windows)[^] изменения произошли с тех пор, как в последний раз каждый каталог был поражен вызовом функции. ЖКС не сидеть и ждать событий от файловой системы NTFS. Таких событий не бывает. Так как же ФСБ получает эти изменения?

Голосование. В принципе, FSW идет в каждый каталог и подкаталог, который ему говорят смотреть, и захватывает список файлов для них. В основном, это звонки Функция ReadDirectoryChangesW (Windows)[^] в каждом каталоге. Чем больше каталогов и подкаталогов, тем дольше длится каждый цикл опроса. Как только все каталоги обработаны за один проход, цикл начинается снова в верхней части дерева каталогов, которое ему велено наблюдать. Это то, что занимает так много процессорного времени.

Проходя через каждую папку, он начинает генерировать события, которые видит ваш код для обнаруженных изменений.

Поскольку вы говорите FSW следить за тысячами папок, требуется тонна процессорного времени, опрашивающего все из них, чтобы получить список файлов, которые изменились.

По сути, вы используете FSW для выполнения задачи, для которой он не был предназначен.


CodingIsDreamy

Спасибо мужик