Pull to refresh

Comments 19

UFO just landed and posted this here
Вы не шутите? Винфон так тормозит на банальном чтении файла?? И опять же зачем все подряд парсить и грузить в память? Почему нельзя просто запихнуть все песни в один текстовик и сделать файл индекса со смещениями, а уже в программе навигацию по индексу и чтение по одной песне за раз из файла? Если даже маленький кусочек текста из файла вызывает такие тормоза… о каких современных технологиях у майкрософт все говорят, инновационных телефонах и т.д.?
Винфон не тормозит на чтении файлов, есть проблемы при конвертации одного формата в другой и с последующей загрузкой.

В конкретно этом случае база с песнями каким-то образом должна попасть в приложение — нужно либо загрузить файл из веба (нужен интернет), либо включить zip файл и распаковать при первом запуске (нужно много времени), либо поставлять приложение с уже готовой базой (большой размер приложения). Я старался соблюдать баланс между 1) размером приложения 2) скоростью первого запуска 3) скоростью последующих запусков.

Другими словами, если я распакую все файлы в приложении, то последующие запуски будут практически моментальными. Но первый запуск, пока все не распакуется, может занять несколько минут.

Навигация по индексу — идея хорошая, но это требовало еще некоторое время на изучение. Как вариант дальнейших исследований — подойдет.
Какой примерно размер каждой песни? Попробуйте зазиповать каждый текст по-отдельности и склейте вместе, возможно получится не сильно больше и не надо будет распаковывать всё при первом старте. Если компрессия слишком маленькой получится — паковать по 10-20 штук, вычитывать и распаковываться будет всё так же быстро, а по объёму сильно выиграете.
Если запаковывать все отдельно или создавать для каждой песни отельный файл — тормоза еще больше, т.к. добавляется большое количество файлов, с которыми нужно работать. А выбирать отдельный файл из архива — тоже не вариант, т.к. архив все равно нужно читать, искать нужный файл, распаковывать и читать с него — тормоза при переходах между песнями.
Вы немного неправильно меня поняли. У вас будет всего 2 файла: индексный, и файл с данными. В индексном файле хранится название песни и артиста со всякой прочей дополнительной информацией, смещение в файле с данными и длина собственно текста. Внутри файла с данными каждая песня по-отдельности упакована зипом. То есть это будет много маленьких архивчиков, и все они лежат в одном большом файле, чтобы не надо было файловую систему насиловать. Индексный файл, на сколько я понимаю, у вас уже готов — artists.bin, надо будет только добавить смещение+длину в класс Song.

Чтобы быстро переход работал — всасывать индексный файл со смещениями и длинами в память при старте, тогда чтение текста песни превращается в вычитывание небольшого кусочка файла по известному заранее смещению, длина кусочка тоже известна. Кажется, это должно работать очень быстро.
Именно так и надо делать. Кастомный вариант БД. Примитивный, но максимально подходящий для данного случая. Причем все работать будет примерно с такой же скоростью, как и в авторском варианте, но первоначальная загрузка будет почти мгновенной и без всех этих придуманных наворотов-оптимизаций. Я делал нечто подобное для силверного приложения — локальная БД для фб2 файлов-книг (вернее индекс — описание книги, картинки обложек — в одном бинарном файле). Идея точно такая же была. На десятках тысячах книг поиск происходит (с подгрузкой картинок из такой БД) практически мгновенно. Поиск — в смысле загрузка картинок-обложек из такого вот внешнего большого бинарника. Ну, а индекс в памяти конечно.
this.Dispatcher.BeginInvoke(() =>
    {
       var backroungWorker = new BackgroundWorker();
       backroungWorker.DoWork += backroungWorker_DoWork;
       backroungWorker.RunWorkerCompleted += backroungWorker_RunWorkerCompleted;
       backroungWorker.RunWorkerAsync();
    });


Кто-нибудь объяснит мне, зачем тут нужен Dispatcher и почему нельзя создать BackgroundWorker синхронно?
Впечатляющая производительность!!!
судя по скриншотам вы делали приложение для WP 7.5 и выше.
А можно ли вообще заработать на отечественном рынке?
UFO just landed and posted this here
Поддерживает с версии WP 8.0.
Но также есть и реализация для 7.5 (Mango).
но под 7.5 она довольно уродская и ее сложнее дебажить
UFO just landed and posted this here
В 2010 студии она не работает, только AsyncCTP3 только хардкор
UFO just landed and posted this here
Там хоть бы компы и девайсы нормальные купили. В 2012 году работать за celeron 2 ядерным и монитором 1366x768 еще то удовольствие и всего один девайс lumia 710 на двух девелоперов и тестеровщиков
Нормальная она. Написали 3 коммерческих WP7 проекта и не пискнули. Никаких проблем не было.
Дебаг тоже вполне удобный, единственное на слове await F10 себя ведет некорректно, но это и проблемой то не назовёшь.

Спасибо за интересную статью! Одно небольшое замечание, вместо Isloated Storage Explorer порекомендовал бы обратить внимание на очень хорошую утилитку wptools.codeplex.com которая позволяет просматривать Isloated Storage. При этом вносить какие либо исправления в код самого прилоежния не требуется.
Sign up to leave a comment.