Зависание 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, круто, спасибо. Стало удобнее!


Log in to reply
 

  • 4
  • 14
  • 6
  • 6
  • 2
  • 14
  • 3
  • 2