Вопрос: Хранение списков | Добавлено: 31.08.09 23:17 |
Автор вопроса: ![]() |
VB6. В коллекции объектов содержится информация о треках плейлиста. Мне нужен какой-то способ быстро сохранить эти данные хотя бы в виде строк (если уж скорее всего сериализации мне не видать). Допустим у меня в плеере два плейлиста по десять тыщ треков, как это быстро сохранить?
у каждого трека вот столько полей: Public album As String
Public artist As String Public comment As String Public composer As String Public copyright As String Public genre As String Public song As String Public track As String Public year As String Public gotTags As Boolean 'После запроса тегов = true Public file As String Public tlen As Long 'Song length (s) Public flen As Long 'File size Public remote As Boolean 'Stream info Public channels As Long Public frequency As Long Public ctype As Long Public plugin As Long |
Ответы | Всего ответов: 17 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #1 | Добавлено: 01.09.09 07:47 |
имхо .. xml тут прям напрашивается.. Описываешь структуру трека и вперед.. делать ту же сериализацию только вручную.. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 48 |
Профиль | Цитата | #2 | Добавлено: 01.09.09 15:58 |
Winand, а не проще узнавать артиста, жанр и прочуюю информацию выдерая её из файла, а в список вносить путь к файлу, так и быстрее будет |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 01.09.09 19:12 |
Илья, file содержит путь к файлу.
Winamp же так не делает как ты предлагаешь, он один раз читает и запоминает, когда обращаешься к треку теги обновляем, читаем заново. |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 48 |
Профиль | Цитата | #4 | Добавлено: 01.09.09 21:25 |
Winamp же так не делает как ты предлагаешь, он один раз читает и запоминает
А ты хочешь сделать второй винамп или что-то новое? Вообще можно сделать линейное хранение:
И в таком стиле продолжать заполнять значения в файл, такой файл легко прочитать, и именно так делает винамп, правда не совсем так, но алгоритм похож, если уж тебе нужно что-то подобное |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 01.09.09 22:13 |
В каком-то смысле второй винамп) Цель - удобный простой плеер под себя. При том не недоплеер, а настоящий юзабельный.
Ну что ж EROS, я ранее думал об XML, но не решался начать разбираться) Спасибо. Плейлист в 5581 трек пишется в файл за 0.9-1.0 сек. Получаем xml размером 2.59Мб. Вполне разумно и терпимо вроде бы. Загрузку назад правда пока не делал. |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 02.09.09 02:55 |
С другой стороны в бинарный файл своего формата наверное еще быстрее записывать.
UPD. Чтение этих 5581 трека идет 20 секунд. Не катит вообще)
|
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #7 | Добавлено: 02.09.09 07:38 |
Чтение этих 5581 трека идет 20 секунд. Не катит вообще)
Ну что я могу сказать.. по всей видимости это кривая реализация библиотеки.. потому как на НЕТ на файлах до 50Мб разницы практически никакой.. будь то бинарная сериализация или xml. А при таком раскладе тебе однозначно надо на бинарник переходить. На больших файлах выигрыш в скорости будет достаточно серьезный.. |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #8 | Добавлено: 02.09.09 22:36 |
При качественной реализации механизма на адеватных размерах данных разницы между бинарным форматом и XML практически не будет, потому что почти все время займут операции работы с диском |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #9 | Добавлено: 02.09.09 22:49 |
А если читать данные в переменную и парсить регэкспом? наверное всё таки не 20 секунд это будет |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #10 | Добавлено: 02.09.09 22:52 |
рэгексп это на самом деле не так быстро как хотелось бы того |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #11 | Добавлено: 02.09.09 23:34 |
Так, Венамп хранит в таком формате
#EXTM3U
#EXTINF:244,5'Nizza - Сюрная F:\My Music\5'nizza\2003 - Пятница\01 - Сюрная.mp3 #EXTINF:166,5'Nizza - Я не той... F:\My Music\5'nizza\2003 - Пятница\02 - Я не той....mp3 <...> и запускается быстро. Хотя тут на каждый трек по 3 параметра, а не по 18) Наверное и правда не нужно столько данных хранить постоянно. |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #12 | Добавлено: 04.09.09 04:03 |
Остановился на бинарном формате. Время парсинга файла(1026Кб) 1.3 сек. Правда на неправильном плейлисте сразу упало ide видимо из-за CopyMemory. |
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #13 | Добавлено: 04.09.09 04:26 |
CopyMemory? О_О
1.3 сек - это с учетом считывания файла с диска или без? Сколько времени занимает отдельно парсинг без IO? |
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #14 | Добавлено: 04.09.09 18:46 |
чтение этого файла в массив байтов занимает 0 мс![]()
По сути 1.3 сек это парсинг с добавлением объектов в коллекцию и эдементов listview
|
Номер ответа: 15 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #15 | Добавлено: 05.09.09 01:41 |
0 мс - это не чтение с RAID0, а чтение из кеш-памяти.
Может меня .NET сильно разбаловал, но для анализа бинарного файла и его загрузки в ListBox 1.3 с - это слишком много... |
|