Запуск программы и добавление актера

Предложения и пожелания по поводу новых функций в Movienizer.
Post Reply
User avatar
maxez
Star
Posts: 209
Joined: Tue Feb 05, 2008 2:58 pm

Запуск программы и добавление актера

Post by maxez » Tue Feb 05, 2008 3:40 pm

По результатам довольно интенсивной эксплуатации было замечено 2 момента, связанных с быстродействием программы:

1. Добавление актера сопровождается очень длительной работой с базой (до минуты на особо заслуженных личностях с большой фильмографией). Как я понимаю, выполняются запросы по всем фильмам, в которых данный персонаж был задействован. Для повседневного использования это не критично, но при считывании информации из online-баз винт горит, не угасая :|

2. С увеличением размера базы (>200 фильмов в коллекции, >40000 фильмов в базе, размер базы ~50MB, >7000 файлов в папке Covers) первый запуск программы стал неприемлемо длительным. При этом последующие запуски выполняются значительно быстрее,что наводит на такую мысль:
может, при запуске программы выполнять простое одноразовое зачитывание всего файла базы в память (это займет от силы секунд 10) для того, чтобы он максимально разместился в системном кэше, и уже после этого работать с ним через движок SQLite?

Пока что для заполнения базы использую ramdrive (работает молниеносно, что еще раз наводит на мысли о кэшировании), но для повседневной эксплуатации этот метод не подходит, т.к. запуск ramdrive на 500MB сам по себе занимает секунд 40.
Movies in collection: 533, in database: 76717
Persons in collection: 5333, in database: 22715

User avatar
maniac
Developer
Posts: 4410
Joined: Wed Jan 23, 2008 11:06 am
Location: La Prairie, Canada
Contact:

Re: Запуск программы и добавление актера

Post by maniac » Tue Feb 05, 2008 7:35 pm

maxez wrote:По результатам довольно интенсивной эксплуатации было замечено 2 момента, связанных с быстродействием программы:

1. Добавление актера сопровождается очень длительной работой с базой (до минуты на особо заслуженных личностях с большой фильмографией). Как я понимаю, выполняются запросы по всем фильмам, в которых данный персонаж был задействован. Для повседневного использования это не критично, но при считывании информации из online-баз винт горит, не угасая :|

2. С увеличением размера базы (>200 фильмов в коллекции, >40000 фильмов в базе, размер базы ~50MB, >7000 файлов в папке Covers) первый запуск программы стал неприемлемо длительным. При этом последующие запуски выполняются значительно быстрее,что наводит на такую мысль:
может, при запуске программы выполнять простое одноразовое зачитывание всего файла базы в память (это займет от силы секунд 10) для того, чтобы он максимально разместился в системном кэше, и уже после этого работать с ним через движок SQLite?

Пока что для заполнения базы использую ramdrive (работает молниеносно, что еще раз наводит на мысли о кэшировании), но для повседневной эксплуатации этот метод не подходит, т.к. запуск ramdrive на 500MB сам по себе занимает секунд 40.
С людьми сейчас на вставку каждого фильма вызывается 1 SQL-запрос, а с фильмами нормально - для вставки людей общий 1 длинный запрос. Это поправимо.

С картинками тоже собираемся ввести подкаталоги, а то большое кол-во файлов тормозит работу :(

Что касается работы с базой, то тут сложно. Юзается старая версия SQLite, там вроде такого нельзя делать. А возможности новой все некогда изучить...
ImageImage

User avatar
maxez
Star
Posts: 209
Joined: Tue Feb 05, 2008 2:58 pm

Re: Запуск программы и добавление актера

Post by maxez » Wed Feb 06, 2008 9:49 am

maniac wrote:С картинками тоже собираемся ввести подкаталоги, а то большое кол-во файлов тормозит работу :(
Да, разбить хотя бы по буквам уже было бы неплохо.

А ваиант складывания картинок в один большой файл на основе zip-библиотеки не рассматривался?
maniac wrote:Что касается работы с базой, то тут сложно. Юзается старая версия SQLite, там вроде такого нельзя делать. А возможности новой все некогда изучить...
Ну, если бы движок базы мог принимать в качестве источника HANDLE файла, то это вообще было бы идеально - сделать через memory file.
Но я имел в виду другое: при запуске программы выполнить последовательность OpenFile -> ReadFile -> CloseHandle, чтобы файл базы хотя бы частично разместился в кэше.
Сгодня проделаю эксперимент - скажу, какой выигрыш даст такой метод.
Movies in collection: 533, in database: 76717
Persons in collection: 5333, in database: 22715

User avatar
maxez
Star
Posts: 209
Joined: Tue Feb 05, 2008 2:58 pm

Re: Запуск программы и добавление актера

Post by maxez » Wed Feb 06, 2008 10:13 am

maxez wrote:Но я имел в виду другое: при запуске программы выполнить последовательность OpenFile -> ReadFile -> CloseHandle, чтобы файл базы хотя бы частично разместился в кэше.
Сгодня проделаю эксперимент - скажу, какой выигрыш даст такой метод.
Имеем:
База 36MB, 140 фильмов в коллекции, 37000 фильмов в базе.

Результаты эксперимента:
1. Загрузились, запустили Movienizer = 23 секунды.
2. Загрузились, открыли файл dmo в текстовом редакторе FAR (редактор зачитывает файл полностью в память и он, соответственно, ложится в файловый кэш), закрыли FAR, запустили Movienizer = 4 секунды.

ОДНАКО :mrgreen:
Movies in collection: 533, in database: 76717
Persons in collection: 5333, in database: 22715

User avatar
maniac
Developer
Posts: 4410
Joined: Wed Jan 23, 2008 11:06 am
Location: La Prairie, Canada
Contact:

Re: Запуск программы и добавление актера

Post by maniac » Wed Feb 06, 2008 10:24 am

maxez wrote:2. Загрузились, открыли файл dmo в текстовом редакторе FAR (редактор зачитывает файл полностью в память и он, соответственно, ложится в файловый кэш), закрыли FAR, запустили Movienizer = 4 секунды.
Хм, по идее при втором запуске можно было обойтись и без ФАРа.
А винт случайно не ноутбука? У них время доступа обычно хуже, чем и десктопных вариантов.
ImageImage

User avatar
maniac
Developer
Posts: 4410
Joined: Wed Jan 23, 2008 11:06 am
Location: La Prairie, Canada
Contact:

Re: Запуск программы и добавление актера

Post by maniac » Wed Feb 06, 2008 10:31 am

maxez wrote:А ваиант складывания картинок в один большой файл на основе zip-библиотеки не рассматривался?
Долго будет работать, как мне кажется.
ImageImage

User avatar
maxez
Star
Posts: 209
Joined: Tue Feb 05, 2008 2:58 pm

Re: Запуск программы и добавление актера

Post by maxez » Wed Feb 06, 2008 10:45 am

maniac wrote:
maxez wrote:2. Загрузились, открыли файл dmo в текстовом редакторе FAR (редактор зачитывает файл полностью в память и он, соответственно, ложится в файловый кэш), закрыли FAR, запустили Movienizer = 4 секунды.
Хм, по идее при втором запуске можно было обойтись и без ФАРа.
Невнимательно читаем ;)
Каждый раз для чистоты эксперимента операционная система перезагружалась и никаких лишних действий не выполнялось.
Так что тут все честно, без "хвостов".
maniac wrote:А винт случайно не ноутбука? У них время доступа обычно хуже, чем и десктопных вариантов.
Обычный десктопный винт на 7200.
Да и тут важны не абослютные цифры, а относительные. Прирост от предварительного прочитывания есть, и весьма значительный.
Может в следующий билд вставите опциональный ключик командной строки "--preread"?
Там кода на 7 строчек
GlobalAlloc, GlobalLock, OpenFile, ReadFile, CloseHandle, ClobalUnlock, ClobalFree :)
Movies in collection: 533, in database: 76717
Persons in collection: 5333, in database: 22715

User avatar
maniac
Developer
Posts: 4410
Joined: Wed Jan 23, 2008 11:06 am
Location: La Prairie, Canada
Contact:

Re: Запуск программы и добавление актера

Post by maniac » Wed Feb 06, 2008 11:16 pm

maxez wrote:Может в следующий билд вставите опциональный ключик командной строки "--preread"?
Там кода на 7 строчек
GlobalAlloc, GlobalLock, OpenFile, ReadFile, CloseHandle, ClobalUnlock, ClobalFree :)
Я обещаю изучить этот вопрос :)
Как освободится программер, попрошу его подумать как грузить SQLite целиком в память.
ImageImage

User avatar
maxez
Star
Posts: 209
Joined: Tue Feb 05, 2008 2:58 pm

Re: Запуск программы и добавление актера

Post by maxez » Thu Feb 07, 2008 8:24 am

maniac wrote:Я обещаю изучить этот вопрос :)
Уже изучил 8-)
Написал программку MovienizerLoader размером 40KB, которая реализует на практике описанную мной идею.
Результат таков:
---
на базе размером 36MB
---
первый старт Movienizer сразу после загрузки системы занимает 23 секунды.
первый старт Movienizer через MovienizerLoader сразу после загрузки системы занимает 5 секунд.

"Ай да я, суперсверх я!" (c)

Если нужно, могу выдать с исходником - включите в билд для особо хитрых юзеров.
Movies in collection: 533, in database: 76717
Persons in collection: 5333, in database: 22715

User avatar
maniac
Developer
Posts: 4410
Joined: Wed Jan 23, 2008 11:06 am
Location: La Prairie, Canada
Contact:

Re: Запуск программы и добавление актера

Post by maniac » Thu Feb 07, 2008 2:30 pm

maxez wrote:Если нужно, могу выдать с исходником - включите в билд для особо хитрых юзеров.
Конечно, давайте :)
Мыло начинается на саппорт и заканчивается названием домена :)
ImageImage

Post Reply