Зависание bas при создании овер много строк без таймаута
-
Ребята кто что думает если мы создаем строки в цикле в одном потоке, выполнения = 300 000
то бас при работе зависает намертво но с задачей справляется.
Кто изгалялся в этом вопросе?
если таймаут юзать то работает дольше ну а без таймаута скорость зависит уже от железа
но хотелось бы чтобы окно баса не зависало. Есть мысли предложения?
-
Поставить минимальный таймаут, при котором не зависает, но и работает максимально быстро.
-
@Antonio если юзать таймаут одна строка в секунду, что не есть гуд при 300 000 строк что значит 5000 минут
я в блоке спать выставил 1 миллисекунду но бас почему то считает в секунду
-
тестируется где ? в дебагере или в запуске.
куда и как строки создаются ? может стоит юзать ресурсы , а не списки ? и т.д. Тут пример нужен, а не догадки.
-
@out в цикле, один поток успшных и ошибочных = 1, сгенерировать случайную строку и запись в файл, цикл от 1 до 300 000.
ресурс ненужен тут нужно именно в файл строк накидать и все.
в запуске, в записи все нормально работает так как время на отрисовку уходит. а в запуске окно баса на мертво весит до тех пор пока 300 000 строк в файл не накидает.
Это особенность баса, есть софты которые работают с строками и т.д кодеры делают как-то то изолируют форму от выполнения то есть во время выполнения форма софта не зависает. а тут бас замирает пока железка не отработает.Да банально можно воспроизвести вот так: одно действие вывод в лог и запустить выполнение 100 раз, бас зависает и далее вылетает. Типо эффект узкого горлышка.
-
такая проблема, когда интерфейс виснет по время работы софта, только у однопоточных приложений, БАС под это описание не подходит.
Думаю проблема как-раз таки в том, что запись идет сразу в файл, каждую строку. Т.е. нужно обратится к файлу 300к раз. А если бы использовался ресурс, то к файлу было бы всего несколько обращений (все остальное время, данные были бы в оперативке)
-
Согласен. Тут лучше в список писать, а в конце цикла сохранить список в файл. И БАС секунду считает вместо 1 мл как раз из-за времени чтения\записи в файл.
-
Тоже так же зависает, вот пример с ресурсом (ресурс создаеться в оперативке) пример в цикле генерит лям строк после чего закидывает ресурсы в список и список сохраняется в файл
0_1511929295359_srtroka.xmlминус этого способа что оперативку начинает отжирать когда строки в ресурсе копятся и симптомы остаються те же.
в ресурсе интервал между использованием что 1 что 10000 разницы нет.
перед записью поставил спать 1000 в это время бас отвисает что указывает на то что зависание формы происходит во время генерации строки и записи ее в ресурс.
Так что парни ваши предположения не верны.
-
@Alexx ок, тогда юзай это решение 0_1511958115024_1511929300297-srtroka.xml
1кк строк генерится 4сек, вместо 50сек. Да, интерфейс тоже при этом "подвиснет", но всего лишь на 4сек.ps: 1кк строк в процессе сожрет около 300мб RAM, но если оперативки жалко, можно писать каждую строку сразу в файл или к примеру каждые 10к.
-
@out said in Зависание bas при создании овер много строк без таймаута:
@Alexx ок, тогда юзай это решение 0_1511958115024_1511929300297-srtroka.xml
1кк строк генерится 4сек, вместо 50сек. Да, интерфейс тоже при этом "подвиснет", но всего лишь на 4сек.ps: 1кк строк в процессе сожрет около 300мб RAM, но если оперативки жалко, можно писать каждую строку сразу в файл или к примеру каждые 10к.
да решение шустрое, благодарю за код
-
еще советую, после записи строк в файл, очистить список, чтобы освободить память.
-
@out, а почему у меня такой огромный интерфейс в твоем проекте?
http://prntscr.com/hgtam1Это как-то настраивается?
-
да, масштаб можно менять http://ipic.su/img/img7/fs/kiss_40kb.1511964717.jpg
это для HIDPI экранов.
-
@out, круто, спасибо. Стало удобнее!