![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
12usver12 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
Ситуация такова, есть внешняя консольная программа, которую выполняют через командную строку, программа имеет большую базу данных около 300 мб в виде одного файла.
Работает так: запрос от клиента, запускается программа , считывается база данных в память (при этом идет медленная и ресурсоемкая задача считывания с винта), 3-4 сек прога отработала выдала результат и закрылась и так по кругу в несколько потоков. Из-за чего катасрофически падает производительность т.к. ограничена скорость с чтения с медленного магнитного винта. Хотелось бы какое-то решение на уровне ос, кэширования этого файла базы данных в оперативную память т.к. он не изменяется, чтобы он подгружался не с диска, а с памяти сразу. На эту внешнюю программу я не могу повлияеть и перестроить ее. Что можно придумать ? Интересует как програмное (через винапи какие-нить) так и готовое какое-нибудь решение на уровне какого-то по или функции ос. |
|||
|
||||
12usver12 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
кажется решил проблему свою softperfect.com/products/ramdisk/
без драйвера тут не обойтись |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
o2n3e |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 19.8.2011 Репутация: нет Всего: -5 |
Модератор: Сообщение скрыто. |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
Можно подумать в венде этого нет. Этот способ будет точно также работать и в венде, как и в никсе, только это ламерский способ. Вполне может получиться так, что при следующем обращении к файлу, он уже будет благополучно замещен в кеше другим. Потому-что попадание зависит от параметров кеширования, от частоты обращения к этому файлу, от частоты обращений к диску других приложений (одним словом от фазы луны). Лучше уж вы бы как раньше, просто "учили жить" без конкретики, за умного может бы сошли ... ![]() ![]() Это сообщение отредактировал(а) volatile - 19.10.2013, 10:58 |
|||
|
||||
12usver12 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
volatile +1
если учесть что и оперативки не так уж и много, кто ж его будет кэшить то постоянно |
|||
|
||||
akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: нет Всего: 5 |
memory-mapped files
-------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Возможно, эта "внешняя консольная программа" уже пользуется mmap'ом, возможно, что и нет (и не понятно, есть ли возможность переписать её под mmap). Для нескольких потоков это не плохой вариант (понятно, что даже при этом файл не будет постоянно в оперативной памяти). Но если программа сильно "внешняя", приходится искать другие пути. Ramdisk сожрёт часть оперативной памяти, могут начаться проблемы с производительностью ОС. Наряду с ramdisk'ом было бы недурно доставить памяти... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
||||
|
||||
akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: нет Всего: 5 |
Никто не мешает батник написать или запустить этот выполняемый файл как процесс из самописного внешнего. Эти два решения никак не отрицаются в первоначальной постановке задачи, так что для справки, что бывает и такое, подойдёт. А дальше решать уже автору темы. -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
А чем родительский процесс поможет дочернему, если дочерний читает базу напрямую из файла? Вобщем-то, и RAM-диск вроде не должен хранить данные в физической памяти. В этом плане, решение с memory-mapped files аналогичное. Но, учитывая:и
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
Не аналогичное. Рам диск (нормальный конечно) хранит исключтельно в физической памяти. и никаким образом с диском и файлом не связан. (он даже не свопится, то есть всегда в физ.памяти) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |