whiskas 144 Опубликовано: 10 апреля, 2022 (изменено) Когда то была идея сделать нормальные коллекции для OC. К примеру как в джаве. Всякие ArrayList, LinkedList, HashMap, TreeSet, ... . Потом я подумал о том что б сделать эти коллекции с записям данных на диск. Но сами понимаете записывая в 1 файл быстро упрёмся в лимит по ОЗУ. Да и парсить большой файл ради 1 элемента глупо. И тут я нашел интересную штуку под названием unmanaged drive Сначала я ставился скептически к нему. Думал все равно будет долго и тд. Но позже решил провести тестирование перфоменса Я решил сначала попробовать записывать в сектора. И увидеть сколько операций можно сделать в 1 секунду. И результаты меня приятно удивили. Я смог записать в 1280 секторов (1 сектор = 512 bytes) за чуть больше 1 секунды. \ Но позже мое тестирование немного огорчило меня. Но все равно этот диск даже с этой проблемной очень быстрый. Я провел тот же эксперимент, но уже записывал в сектора не по порядку. В предыдущем тесте я записывал в первый сектор потом во второй и тд. В этом тесте я записываю в 1 потом в 32 потом 64 и потом когда дойду до 1024 возвращаюсь к 2 и тд ... В этом случае запись в файл заняло 4 секунды против 1.33. Получается диск, работает приблизительно, как и реальный диск. Где двигать каретку это дорогостоящая операция. Но даже в таком случае перфоманс меня устраивает. В следующем тесте показывается что чтение быстрее чем запись в 2 раза. Позже я реализовал какую не какую TreeMap. Очень сырую, но сделал для тестирования перфоменса в реальных условиях. Мапка была сырая с багами и тд. Также и либка что позволяет работать с unmanaged disk тож баганутая и сырая. Но я смог увидеть реальные результаты. Я записывал в пустую мапку 1000 элементов поочереди. То есть не какой-то putAll механизм. А простой put вызвал 1000 раз. На запись этих 1000 элементов ушло 43 секунд. Что очень даже неплохо. ~23 элементов в секунду. Притом что это можно ускорить раз в 100 реализовав putAll метод. Далее я попытался прочить 1000 элементов по ключах. И на это ушло 17 секунд. Также и при тестирование так как код сырой делалось много лишних движений. Без каких думаю все б работало быстрее. И также небыло механизма балансировки дерева что может сильно повлиять на результат Притом прошу заметить что это TreeMap а не HashMap. HashMap был бы в раз 10 точно быстрее. Выходит что при помощи unmanaged drive мы можем легко обойти 1 тик штрафа при открытии файла. И записывать и читать данные намного быстрее. Также мы можем хранить данные в них, а не в ОЗУ используя коллекции. Экономя очень много памяти. Изменено 10 апреля, 2022 пользователем whiskas 2 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах