контроль каталога

Что является лучшим способом для меня проверить на новые файлы, добавленные к каталогу, я не думаю, что filesystemwatcher подошел бы, поскольку это не всегда на сервисе, а методе, который работает, когда моя программа запускает.

существует более чем 20 000 файлов в структуре папок, которую я контролирую, в настоящее время я проверяю каждый файл индивидуально, чтобы видеть, находится ли filepath в моей таблице базы данных, однако это занимает приблизительно десять минут, и я хотел бы убыстриться, это возможно,

Я могу сохранить дату, папка была в последний раз проверена - это легкий получить все файлы с createddate> в последний раз проверенная дата.

кто-либо получил какие-либо Идеи?

Спасибо

Mark

5
задан foz1284 8 May 2010 в 08:37
поделиться

5 ответов

Ваш подход является единственно возможным (т.е. наблюдатель файловой системы позволяет вам видеть изменения, а не проверять при запуске).

Выясните, что занимает так много времени. 20.000 проверок не должны занимать 10 минут - максимум 1. Ваша программа написана медленно. Как ее проверить?

Подсказка: не спрашивайте базу данных, получите список всех файлов в памяти, список всех файлов в базе данных, проверку в памяти. 20.000 SQL-запросов к базе данных слишком медленны, для получения списка таким способом нужно ОДНО.

5
ответ дан 14 December 2019 в 01:03
поделиться

10 минут кажется ужасно длинным для 20 000 файлов. Как вы проводите сравнение? Ваше предложение также не учитывает удаленные файлы. Если вы хотите удалить их из базы данных, вам придется провести полное сравнение.

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

2
ответ дан 14 December 2019 в 01:03
поделиться

FileSystemWatcher является не надежным, поэтому даже если бы вы могли использовать сервис, он не обязательно будет работать для вас.

Два варианта, которые я вижу:

  1. Ведите список файлов, о которых вы знаете, и постоянно сравнивайте с этим списком. Это позволит вам увидеть, были ли файлы добавлены, удалены и т.д. Храните этот список в памяти, вместо того чтобы запрашивать базу данных для каждого файла.
  2. Как вы предлагаете, храните временную метку и сравнивайте с ней.
1
ответ дан 14 December 2019 в 01:03
поделиться

Наличие службы FileSystemWatcher, как предлагает Кевин Джонс, вероятно, является наиболее прагматичным ответом, но есть и другие варианты.

Вы можете наблюдать за каталогом с помощью inotify, если вы смонтируете его с помощью Samba в Linux. Это, конечно, предполагает, что вы не возражаете против фрагментации своей платформы, но inotify для этого и существует.

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

0
ответ дан 14 December 2019 в 01:03
поделиться

Можете ли вы написать службу, работающую на этой машине? Затем служба может использовать FileSystemWtcher

0
ответ дан 14 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: