OberonCore https://forum.oberoncore.ru/ |
|
Абстракция Files.File и её реализации https://forum.oberoncore.ru/viewtopic.php?f=23&t=4214 |
Страница 2 из 3 |
Автор: | Пётр Кушнир [ Вторник, 15 Январь, 2013 02:07 ] |
Заголовок сообщения: | Re: Абстракция Files.File и её реализации |
Я видел цитату, конечно же. Видимо, выглядит назойливо, да Правильно ли я понял, понимание повлияло в лучшую (без сомнения) сторону для всех уровней реализации компоненты, вплоть до винапи? Собственно, у меня 'проблема" как раз с винапи, каждое погружение в которое вызывает во мне лютое отвращение, даже и не знаю, почему |
Автор: | Илья Ермаков [ Вторник, 15 Январь, 2013 02:15 ] |
Заголовок сообщения: | Re: Абстракция Files.File и её реализации |
Пётр, возьмите книги Рихтера - там WinApi в плане работы с памятью и прочей системщиной отлично описано. |
Автор: | ilovb [ Вторник, 15 Январь, 2013 09:20 ] |
Заголовок сообщения: | Re: Абстракция Files.File и её реализации |
Илья Ермаков писал(а): -- пардон, у Вас в цитате как раз про размер кластера тоже сказано. Ну дык - и какой на Вашей ФС размер кластера? А если она, например, в VDS, в виртуальной файловой системе, что для серверов почти норма сегодня - сколько там отображений до уровня НЖМД? На персоналках сегодня в 99% случаев 4 КБ: http://support.microsoft.com/kb/140365/ru Для серверов может быть больше. Но обычно 4КБ - 8КБ. Кстати автор Lua советует читать/писать по 8КБ. Про VDS и Линупс ничего не скажу И вот еще: Цитата: Каждый раз, когда происходит чтение или запись в файл с диска, то это происходит большими кусками, даже если вам нужен всего один байт. Так устроено, что минимальная физическая единица записи/чтения называется «сектор», стандартный размер которого 512 байт. Но при выборе файловой системы используется единица «кластер», размер которой кратен размеру сектора. При установке Windows, стандартный размер кластера – 4 KiB. Это значит, что если у вас есть файл размером 1 байт, то физически он будет занимать весь кластер. Соответственно при чтении/записи операционная система будет оперировать кластерами. Из этого следует, что если записать в файл последовательно 2 KiB данных, а потом ещё 1 KiB, то на диск будет записано 4 KiB в первый раз, а потом 4 KiB второй раз. Чтобы избежать такой двойной записи в один и тот же кластер, достаточно объединить данные и скинуть их на диск за один раз. Также, если вы пытаетесь записать 2 KiB с позиции в файле 3 KiB, то первый KiB пойдёт в первый кластер, а второй KiB будет записан уже во второй кластер. Похожая ситуация происходит при чтении. Если вы читаете сколь-угодно байт из файла, то будет прочитан весь кластер, а если данные пересекают границу двух кластеров – то два кластера. Хотя, стоит учесть, что все жёсткие диски и RAID контроллеры имеют внутренний кэш, который может существенно ускорить чтение и запись секторов. Для избегания повторных операций чтения/записи, всегда оперируйте последовательными блоками памяти, размером в кластер. В этом поможет обычный класс FileStream, однако размер его внутреннего буфера по-умолчанию жёстко установлен в 4 KiB. Просто получите размер кластера, и передайте его в конструктор FileStream в качестве переменной bufferSize. http://habrahabr.ru/post/165729/ |
Автор: | Иван Денисов [ Вторник, 15 Январь, 2013 12:42 ] |
Заголовок сообщения: | Re: Абстракция Files.File и её реализации |
Я попробовал 4k сделал, разницу не особо ощутил. Сделал 8к — ББ стал летать ощутимо быстрее. У меня Ubuntu + Wine. Файловая система ext4. Проверьте на Windows, чувствуется ли разница? Может у кого есть файловый benchmark? |
Автор: | ilovb [ Вторник, 15 Январь, 2013 13:08 ] |
Заголовок сообщения: | Re: Абстракция Files.File и её реализации |
Иван Денисов писал(а): Файловая система ext4. А размер кластера какой? хотя в Wine там фиг знает как оно работает Сегодня постараюсь потестить вечером на винде. |
Автор: | Илья Ермаков [ Вторник, 15 Январь, 2013 16:15 ] |
Заголовок сообщения: | Re: Абстракция Files.File и её реализации |
Так что там тестить - Иван же не с диском работает через файл, а наоборот - временный файл использует как буфер в памяти. Ясное дело, чем больше - тем быстрее будет. |
Автор: | ilovb [ Вторник, 15 Январь, 2013 16:31 ] |
Заголовок сообщения: | Re: Абстракция Files.File и её реализации |
Илья Ермаков писал(а): Так что там тестить - Иван же не с диском работает через файл, а наоборот - временный файл использует как буфер в памяти. Ясное дело, чем больше - тем быстрее будет. Ничего не понял |
Автор: | Иван Денисов [ Вторник, 15 Январь, 2013 19:36 ] |
Заголовок сообщения: | Re: Абстракция Files.File и её реализации |
Илья Ермаков писал(а): Так что там тестить - Иван же не с диском работает через файл, а наоборот - временный файл использует как буфер в памяти. Ясное дело, чем больше - тем быстрее будет. Да нет, на задаче по скачиванию не проверял. Да там это на самом деле и не критично, и на скорость скачивания скорее всего слабо повлияет. Мне показалось, что быстрее начали открываться документы и поиск по справке быстрее выполняться. Но вот проверил сейчас еще раз и, думаю, что нужен все-таки эталонный тест. Сложно «на глаз» оценить...
|
Автор: | Евгений Темиргалеев [ Вторник, 15 Январь, 2013 20:31 ] |
Заголовок сообщения: | Re: Абстракция Files.File и её реализации |
Иван Денисов писал(а): Сложно «на глаз» оценить... Ох, братцы... а если посмотреть вооружённым взглядом? Вложение: Или прибавить в варево мышиный хвост, щепотку серы и каплю ртути --- приблизимся к философскому компоненту? ...
|
Автор: | Иван Денисов [ Вторник, 15 Январь, 2013 21:10 ] | ||
Заголовок сообщения: | Re: Абстракция Files.File и её реализации | ||
Евгений Темиргалеев писал(а): Ох, братцы... а если посмотреть вооружённым взглядом? Посмотрел вооруженным — разницы нет что 2K, что 8K.Чтение хромосомы, и запись в другой файл ей комплементарной последовательности. Homo_sapiens.GRCh37.68.dna.chromosome.1.fa (253.4 МБ) 2k = 78.2 сек 4k = 78.4 сек 8k = 78.8 сек 64k = 78.3 сек Разница в пределах случайной погрешности (фрагментации винта и т.п.).
|
Автор: | Пётр Кушнир [ Вторник, 15 Январь, 2013 21:10 ] |
Заголовок сообщения: | Re: Абстракция Files.File и её реализации |
Теперь для куска обсуждения (про кластеры на диске) понадобится целый подфорум "Эзотерика" (хотя и Флуд подойдёт) |
Автор: | Роман М. [ Вторник, 15 Январь, 2013 21:46 ] |
Заголовок сообщения: | Re: Абстракция Files.File и её реализации |
Иван Денисов писал(а): И длинные строки безразмерные тоже значит можно через Files делать? Такое часто надо для биоинформатики, например, где строки очень большие. И для приема данных с прибора... Данные с прибора имеет смысл обрабатывать по мере поступления, в памяти.Ещё мне вспомнился TextModels.Model из-за его способности гибко работать над текстом (вставка/вырезка текста). Хотя он может быть слишком "жирным" в памяти для безатрибутного и длинного текста. |
Автор: | Роман М. [ Вторник, 15 Январь, 2013 22:18 ] |
Заголовок сообщения: | Re: Абстракция Files.File и её реализации |
Просмотрел код bm.7z: конвертер может быть слишком дорогостоящей операцией для такого вида манипуляций. Я бы избавился от него в первую очередь. |
Автор: | ilovb [ Вторник, 15 Январь, 2013 23:25 ] |
Заголовок сообщения: | Re: Абстракция Files.File и её реализации |
Потестил на Windows 7 Размер файла 1,5 ГБ чтение: 2 КБ - 26193 миллисек 27253 миллисек 4 КБ - 24835 миллисек 25740 миллисек 8 КБ - 25912 миллисек 30014 миллисек Размер файла 400 МБ чтение: 2 КБ - 5600 миллисек 5600 миллисек 4 КБ - 5600 миллисек 5585 миллисек 8КБ - 5850 миллисек 5616 миллисек Размер файла 1,8 ГБ чтение: 2 КБ - 27004 миллисек 28579 миллисек 4 КБ - 28127 миллисек 28595 миллисек Размер кучи файлов по ~4 МБ Всего 2,37 ГБ чтение: 2 КБ - 42838 миллисек 4 КБ - 42198 миллисек 8 КБ - 41558 миллисек 16 КБ - 42573 миллисек В общем разницы практически никакой. Думаю что виновник сего безобразия виндозный системный буфер Т.е. буфер BB похоже вообще ни на что не влияет. |
Автор: | Пётр Кушнир [ Среда, 16 Январь, 2013 00:25 ] |
Заголовок сообщения: | Re: Абстракция Files.File и её реализации |
Роман М. писал(а): Иван Денисов писал(а): Ещё мне вспомнился TextModels.Model из-за его способности гибко работать над текстом |
Автор: | Евгений Темиргалеев [ Среда, 16 Январь, 2013 08:14 ] |
Заголовок сообщения: | Re: Абстракция Files.File и её реализации |
Выделена тема: "Free Pascal буферизованное чтение и запись" (viewtopic.php?f=27&t=4217) Поближе к теме, товарищи, пожалуйста. Свои темы поднимать не стесняемся, места всем хватит. |
Автор: | Info21 [ Среда, 16 Январь, 2013 09:58 ] |
Заголовок сообщения: | Re: Абстракция Files.File и её реализации |
ilovb писал(а): Думаю что виновник сего безобразия виндозный системный буфер Он всегда был очень агрессивный.
|
Автор: | ilovb [ Среда, 16 Январь, 2013 10:19 ] |
Заголовок сообщения: | Re: Абстракция Files.File и её реализации |
Весь мой тест ф топку. Сделал трап во время чтения и оказалось что буфер так и остался 2 * 1024 ... HostFiles в exe слинкован? |
Автор: | ilovb [ Среда, 16 Январь, 2013 10:25 ] |
Заголовок сообщения: | Re: Абстракция Files.File и её реализации |
Действительно info21: Цитата: Таким способом нельзя подменить только BlackBox.exe и скомпилированные модули, в него скомпонованные: Kernel, Files, HostFiles, StdLoader.
|
Автор: | ilovb [ Среда, 16 Январь, 2013 10:42 ] |
Заголовок сообщения: | Re: Абстракция Files.File и её реализации |
И еще. Для корректного тестирования надо бы флаг FILE_FLAG_NO_BUFFERING выставить чтобы системный буфер не смазывал картину. |
Страница 2 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |