У меня есть приложение на C#, которое включает в себя множество операций с файлами, то есть чтение, перемещение, удаление, добавление и т. Д. Например, файл считывается из исходного пути в локальной FS и после обработки , он удаляется оттуда, и обработанный файл записывается в целевое местоположение локального FS. Все это делается параллельно с группой систем, каждая из которых работает только с локальными файлами. (Файлы распределялись между ними с помощью балансировки нагрузки)Оптимизация операций с файлами
Как я могу улучшить производительность этого приложения?
Вещи, которые я могу думать о том, являются:
1.) Создайте очередь для конкретного типа операции, такие как удаление. Поместите необходимую информацию в очередь, и отдельный поток будет обрабатывать очередь.
2.) Вместо работы с FS используйте хранилище данных в памяти, такое как Redis. По мере того, как данные будут в кеше, операции будут выполняться быстрее.
3.) Увеличение параллелизма кода. Каждый поток будет работать над отдельным файлом и должен быть быстрее.
Будут ли вышеприведенные подходы работать? Пожалуйста, предложите любые другие альтернативы, которые, возможно, стоит подумать.
Если у вас не более одного физического жесткого диска, над которым вы работаете, параллелизм на самом деле не принесет вам никакой пользы. Говорить, что диск, чтобы делать 3 вещи одновременно, будет включать в себя 2 из тех вещей, которые ждут, пока не будет сделано первое, а не 3-кратное ускорение. – Servy
@Servy, поэтому вы говорите, что на физическом жестком диске может произойти только одна операция, хотя операции связаны с разными файлами. – ptntialunrlsd
@ptntialunrlsd На жестком диске имеется только одна голова, поэтому да, это может быть только чтение/запись в один файл за раз, если у вас нет нескольких дисков. То, что вы манипулируете несколькими файлами, не меняет этого. – Servy