- 1
FileInfo[] files = dir.GetFiles().Where(i=>i.Name.EndsWith(".png") || i.Name.EndsWith(".ico")).ToArray();
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−14
FileInfo[] files = dir.GetFiles().Where(i=>i.Name.EndsWith(".png") || i.Name.EndsWith(".ico")).ToArray();
guest 05.02.2016 14:20 # −1
wvxvw 05.02.2016 14:30 # −1
bormand 05.02.2016 14:39 # +3
Dummy00001 05.02.2016 18:36 # +1
я все еще помню кошмары когда винды имена файлов которые случайно соответствовали 8.3 формату автоматом апперкейсила. (потому что в файловой системе в ДОС формате directory entry даже на NTFS создавалась.) прога создала файл - а потом его найти не может, потому что забыли case-insensitive сравнение префикса/суффикса делать. один разраб в отчаинии на дедлайне в имена файлов пробелы даже вставлял, что бы предотвратить эту ДОСнутую магию.
roman-kashitsyn 05.02.2016 18:38 # +1
guest 05.02.2016 14:41 # +1
Dummy00001 05.02.2016 18:31 # 0
bormand 05.02.2016 18:34 # 0
Dummy00001 05.02.2016 18:53 # 0
bormand 05.02.2016 19:24 # 0
wvxvw 05.02.2016 18:47 # 0
Пример обратного: допустим мы смонтировали NFS систему локально, и, допустим наш клиент и сервер умеют пересылать глобы. В таком случае мы не потратим время на пересылку данных, которые можно было отфильтровать уже на сервере.
Dummy00001 05.02.2016 19:16 # 0
Мейнфреймы это IBM и совсем не юнихи.
> Файловых систем реализующих Юникс десятки, если не сотни.
Намного меньше. Большинство файловых систем были тупо содраны с BSD'шной реализации, aka UFS.
> Как-то мне слабо верится что во всех такая операция будет столько же времени занимать.
Я и не говорил что на всех систем столько же времени занимает.
> Пример обратного: допустим мы смонтировали NFS систему локально, и, допустим наш клиент и сервер умеют пересылать глобы.
Не умеет.
VFS (virtual file system) интерфейс в кернелах почти везде одинаковый и крутится во круг базовых системных вызовов (open/pread/pwrite/close/opendir/readdir/closedir). NFSы реализуются на основе VFS и дополнительных функций физически предоставить не способны.
а glob() и wordexp() вечно были и навсегда останутся примочками из libc.
> В таком случае мы не потратим время на пересылку данных, которые можно было отфильтровать уже на сервере.
Но все равно каталог надо будет читать полностью, где бы ты его не читал: клиент или сервер. Сетка по сравнению с винтом все еще быстрее.
bormand 05.02.2016 19:23 # 0
Ну здесь можно возразить тем, что разгон до топовой скорости у tcp/ip не мгновенный, да и вообще, емнип, недостижим на дефолтном карликовом окне...
wvxvw 05.02.2016 19:43 # 0
И что... IBM разрабатывали и разрабатывают ПО для мейнфреймов, в том числе файловые системы, в том числе и такие, которые реализуют Юникс стандарты (более того, последние - как бы самые популярные).
Откуда инфа про меньше? Есть куча проприетарных систем установленых в датацентрах и т.п. местах, куда только по пропускам. И про "содраны" - это очень смелое заявление. Да, есть популярная книжка, которая использует UFS для иллюстрации того как в принципе можно реализовать файловую систему, но это как бы ничего особо не значит. Ну, к примеру, взять тот же Докер, где они сами написали две файловые системы, совсем не похожие на UFS. Да и вообще, цимес современных файловых систем не в том, как определить структуры данных для файлов и каталогов - это < 1% от всей работы. Интересные проблемы: кластеринг, кеширование, "хотсвоп" и т.п.
Откуда уверенность в том, что NFS не умеет? Я вот на днях к нашему NFS клиенту прикрутил оптимизированое рекурсивное удаление директорий. Если бы было нужно, то и глоб тоже бы прикрутил.
Сетка может быть быстрее флешек, иногда. Но есть очень много уровней перенаправления. На самом деле выиграет тот, кто первый закеширует.
Dummy00001 05.02.2016 19:50 # 0
Рынок на столько мелкий что только Veritas какие-то деньги на этом и зарабатывает. Все остальные двигаются в направлении distributed block device.
И бывал я в тех датацентрах в которые только по пропускам... Шумно и холодно.
> И про "содраны" - это очень смелое заявление.
Не просто содраны. Еще лет 10 назад они все еще UFS и назывались. У БСД была своя UFS. У HP-UX была своя. На AIX, SunOS, Solaris, SCO - у всех была "Unix File System" которые слегка с друг-другом были не совместимы.
> Откуда уверенность в том, что NFS не умеет?
Потому что (1) (еще раз) кернелы этого не умеют (glob == userspace), и (2) https://www.ietf.org/rfc/rfc3530.txt
Dummy00001 05.02.2016 19:54 # 0
wvxvw 05.02.2016 20:22 # 0
Что касается UFS, то можно это воспринимать как набор свойств файлов и каталогов, т.е. определенный список аттрибутов, привилегий и т.д. А можно воспринимать как отсылку к конкретной реализации, например, описаной в книжке Practical Filesystem Design, на примере BFS. Но в любом случае, речь о том, что то, что общее у этих файловых систем - это тривиально в написании, и не занимает даже 1% от всего кода реализующего ту или другую систему. Разница же в стратегиях чтения-записи, в том реализуется ли система на аппаратном уровне или на уровне приложения, в том как реализованы дефрагментация, логгирование, восстановление, кластеринг, в том, как построить кеширование в зависимости от аппаратной части, и т.д.
Сказать что все файловые системы содраны с UFS потому что в них есть одинаковые аттрибуты у файлов, это как сказать что все програмы содраны с интернет эксплорер 5 потому что в них использованы функции конвертации строк в числа.
Ну и что, что ты системщик? А я вот работаю в компании, которая разрабатывает файловую систему для тех самых датацентров, куда только по пропускам. Мне больше всего довелось разбираться с AUFS докеровской, но я так же немножко знаю и про Btrfs и про XFS. Ну и конечно, про NFS, т.как с этим работаю каждый день.
Dummy00001 05.02.2016 20:35 # 0
и куда по твоему уходят сисколлы open()/read() и т.д.?
> Мне больше всего довелось разбираться с AUFS докеровской
8 лет траханий с веритасом. шутка: работает на ура, но стоит столько бабла что никто не покупает, а пользуются NFS. c которым и трахался.
> Сказать что все файловые системы содраны с UFS
мля, да не говорил я этого!
я не уверен что вы на самом деле там "файловую систему" делаете - а не какой очередной "object storage".
wvxvw 05.02.2016 20:43 # 0
Если не веришь - возьми тестовые фреймворки типа SFS2008, SFS2014 или Vdbench - они все пользуются NFS клиентом написаным на Яве, и работают с файловой системой без участия кернела.
> Я не уверен ...
Лол
Dummy00001 05.02.2016 20:46 # 0
*facepalm* I weep for your data.
> > Я не уверен ...
> Лол
не ну теперь я точно уверен что это и не файловые системы и не NFS.
bormand 05.02.2016 20:51 # 0
Dummy00001 05.02.2016 21:51 # 0
Потому что приложения доступаются к файловой системе через ядро.
Потому что кернел это единая точка синхронизации доступа между приложениями.
> Взять ту же fuse
bandwidth хороший, но тормозит на meta data.
> от ядра только посекторное i/o или сокеты понадобятся.
fuse никогда не обгонит ядро из-за overhead'а контекст свитчей. вот такой простой ответ.
и так файловые системы меняются редко, то просто смысла в fuse для больших проектов мало.
object storage по крайней мере решают проблему.
bormand 05.02.2016 22:11 # 0
Чтение с диска (даже ссд) уже стало быстрее, чем переключение контекста?
Dummy00001 05.02.2016 23:25 # −1
скорее всего context-switch быстрее. хваленые 100К IOPs без глубоких очередей не достигнешь. глубокие очереди == большие задержки. ожидание ответа/стояние в очереди + обработка прерываний == навярняка медленее чем контекст свитч.
ЗЫ там где я работал, SSD было слишком дорогим удовольствием. стораджы нужны нехилых размеров, а 1TB SLC SSD стоит 2-4 килобакса. максимум где использовался это для лога (log, journal) транзакций на оракаклевых серваках.
wvxvw 05.02.2016 23:14 # −1
Есть много вариантов это реализовать. По-сути базы данных это делали всегда, в каком-то смысле. Такой вариант как с базами данных можно реализовать за счет создания loopback device, который будет выступать в качестве block device для следующего уровня файловой системы с одной стороны, и как обычный файл - для кернела. Производительность будет зависеть от конкретной файловой системы обеспечивающей этот самый loopback device.
wvxvw 05.02.2016 20:54 # −1
Ну вот сходи на сайт к Ораклю и почитай про Vdbench, зачем он существует и кто им пользуется. Ты ж этого не сделал, а вместо этого авторитетно пернул в лужу...
Dummy00001 05.02.2016 21:59 # −1
Я работал 8 лет на стратегического партнера Оракла (Эрикссон). Я это шарашку из нутри знаю. А ты мне тут байки по мотивам рекламных материалов расказываешь...
> и почитай про Vdbench
он умеет сбои электичества симулировать? или битую сеть? битую память?
bormand 05.02.2016 22:19 # −1
bormand 05.02.2016 22:21 # −1
Dummy00001 05.02.2016 23:18 # −1
Dummy00001 05.02.2016 23:38 # −1
а да. это был SuperDome сервак. там вроде есть отличия как ECC работает на разных типах серваков.
bormand 05.02.2016 22:22 # −1
wvxvw 05.02.2016 22:30 # 0
При чем тут реклама - я не в курсе. Речь до сих пор была о том, что NFS клиент и сервер можно реализовать без того, чтобы он работал с кернелом. Ровно точно так же, как, например, FTP. Перед тобой конкретная реализация. Плохая она или хорошая - не мне судить. Но она же существует.
Dummy00001 05.02.2016 23:36 # −1
Да можно. А толку, если для того что бы этим могло пользоватся пользовательское приложение либо (1) его надо переписывать что бы работало с другим интерфейсом или (2) прокладку в ядре делать (типа fuse).
"Плохая она или хорошая [...]"
Слово: "бесполезная".
Ты работаешь с object storage. Это другая пестня и для других целей. Сравнивать с файловыми системами просто не имеет смысла. Интерфейс как у файловой системе для object storage это просто побочный опциональный бонус, не более. Заменой файловой системы это не является.
Как некто кто работал долго с Veritas я тебе могу так же объяснить почему народ толкает object storage: потому что лицензия на Veritas CFS стоит просто охренительных денег. Мало кому нужны все фичи - народ просто хочет нечто надежнее чем NFS, и дешевле чем "правильная" CFS.
wvxvw 06.02.2016 00:21 # +2
Где это, например, не понадобится: при работе с технологиями виртуализации типа Докера.
Но это же не обязательное условие. Точно так же можно например смонтировать файловую систему и через FTP, и при этом FTP можно использовать без того, чтобы вовлекать в процесс ядро.
С чего ты вообще взял обжект сторидж... Ну и конечно, ты ж иксперт и в курсе про полезность или бесполезность бенчамарк тестов, о которых узнал полчаса назад.
Никакой это нe обжект сторидж. Это файловая система для датацентров VMWare, где нужно больше возможностей по управлению ресурсами и более быстрые сетевые протоколы.