Недавно я попал в проект, где у них проблемы со слишком большим количеством файлов в папке, что замедляет доступ. Я считаю, что это более 10 000 файлов в одной папке, где окна начинают замедлять доступ, у нас их порядка 50 000. Все файлы небольшие, и в большинстве случаев нам нужен только доступ к новейшим .1–2.% Из них через файлы Windows и совместное использование печати. Я бы рассмотрел разделение файлов на подпапки, за исключением того, что есть куча устаревшего кода, который может просматривать только одну папку.

Моя идея - я не знаю, возможно ли это или хотя бы правдоподобно - состоит в том, чтобы создать небольшую программу, которая буферизует самые новые файлы .1–2% в памяти, а остальное извлекает с диска по мере необходимости.

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

  2. Есть ли что-то, что уже делает это? Есть ли лучший вариант без серьезных изменений в системе?

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

1
millejos 16 Июл 2012 в 19:29
1
Вы не можете обновить устаревший код для поиска более чем в одной папке? Я бы подумал, что это будет проще всего. Да, то, о чем вы говорите, должно быть возможно, хотя я не уверен, что вы сможете сделать все это в пользовательском режиме - вам нужно будет создать драйвер файловой системы, а затем подключить его в нужном месте. Это потребует гораздо больше усилий.
 – 
Rup
16 Июл 2012 в 19:31
Это был и мой первый вопрос, но нет, это не мой код, и начальство пока не хочет, чтобы он изменялся.
 – 
millejos
16 Июл 2012 в 19:42
Верно. Я по-прежнему считаю, что это правильно, и вы не должны воспринимать это как категорическое «нет». Если у вас нет других решений, вам нужно собрать хороший аргумент, чтобы довести его до вашего менеджера, почему изменение устаревшего кода является самым простым, быстрым и наименее рискованным в целом.
 – 
Rup
16 Июл 2012 в 19:46
Здесь есть множество проблем; если устаревший код - это часть, которая становится медленной, единственное место, где можно исправить это, - это устаревший код. Файлы размером 50 КБ - это слишком много для управления в одной папке NTFS. Если медленный доступ только к проводнику ... используйте командную строку. Комбинация проблем, которые необходимо решить здесь, слишком сложна, чтобы дать простой ответ «да, драйвер пользовательской файловой системы кэширования справится с этим» ... потому что он может , но затраты на разработку драйверов FS для серверная среда, вероятно, лучше, чем исправление унаследованного кода. Это вопрос стоимости.
 – 
Tetsujin no Oni
16 Июл 2012 в 19:50
Если вы не можете изменить код, значит, вы не сможете решить проблему. Если они не изменят код, они не утвердят непроверенные и непроверенные приложения.
 – 
Security Hound
16 Июл 2012 в 20:10

1 ответ

Лучший ответ

Если отложить в сторону "правильный способ решения этой проблемы" на данный момент, то, что вы ищете, называется "Расширения пространства имен оболочки". Есть несколько ресурсов .NET для написания этих расширений проводника.

Конечно, мы должны помнить, почему это не так. Писать расширения проводника в .NET - не лучшая идея.

Надеюсь это поможет.

2
Ani 16 Июл 2012 в 20:10
Честно говоря, .NET 4 исправил эту проблему, но я согласен: не делайте этого в .NET.
 – 
Rup
16 Июл 2012 в 20:32