Отключите все лишнее на целевой странице если она одна, это реально сделать - например скрипты всяких фейсбуков, сторонней аналитики и так далее. Обычно сервесы используют много сторонних скриптов, которые не влияют на работу сайта, но сильно нагружают проц.
Смотрите как идет распределение нагрузки - возможно оно не сплашное, а пиками - тогда можно попробовать запускать потоки более равномерно. Чтоб избегать этих пиков.
Чаще всего можно отрисовку снизить вплоть до 10 (ну 20) .... На загрузку проца, это как раз сильно влияет.
Если сервер свой и без видюхи, то стоит поставить в него видюху.
50 в нынешних условиях для баса с браузером, достаточно много. Можно попробовать разбить на несколько копий баса по 25 например.
Можно использовать рам диск для работы с профилями - но это уже продвинутый уровень.
For и потоки
-
Знающие, помогите реализовать следующий алгоритм.
Существуют 100 строк, которые нужно вбить в текстовую строку под разными параметрами на сайте. То есть, у сайта существуют разные настройки (меняются на сайте через комбобоксы), которые нужно менять перед каждым вбиванием 100 строк. Настройка сайта 1 - вбить 100 строк - настройка сайта 2 - вбить 100 строк и т.д. Всего около 300 таких "настроек", которые я собираюсь перебирать через вложенные друг в друга for. Соответственно на самом последнем уровне for вбиваются строки.
Для забивания строк я хочу использовать 10 потоков.
Проблема в том, что пока вбиваются строки, настройки сайтаменять нельзя. То есть на вбивании 90-100 строк, один из потоков может уйти на смену настроек, а другие в это время еще будут вбивать строки. Я хочу этого избежать.Скажите, пожалуйста, как не давать потоку уходить на смену настроек, пока все 100 строк не вбиты под одними настройками сайта?
Использовал foreach для ввода строк(для счета использовал ресурс с 100 строками единичек) но есть проблема преждевременного ухода потоков на смену настроек

-
@RaunOWW
Спасибо за совет, но проблема в том, что необязательно последняя строка в файле будет вбита последней на сайте из-за различной скорости загрузки, зависания потоков и возможных ошибок.
Здесь необходимо какое-то условие об исчерпании ресурса в цикле, или принципиально иной способ перебирания строк...
Без потоков совсем нет проблемы написать такой алгоритм, а вот с потоками трабла. -
@bvvcpa Сделать глобальную переменную, к которой в конце каждого выполнения потока будет прибавляться 1, и проверку, если там у тебя 10 выполнений должно произойти, то цифра 10 в глобальной переменной, и тогда выполнить сохранение настроек. Как-то так...
-
@bvvcpa Я так понимаю, что вам нужна функция lock, которая дает возможность выполнять код только в одном потоке. В нее нужно обернуть все что идет после load.
Пока этой функции нет, но ее можно легко реализовать:
- В OnApplicationStart создаем глобальную переменную с значением 0
- Перед началом циклов ждем пока она не будет равна 0.
- Если она равна 0 устанавливаем ее в 1 и заполняем комбобоксы и строки.
- Когда все заполнено устанавливаем обратно в 0.
Вот пример реализации.
-
@support
Спасибо, но вроде не то, что нужно, либо я не понял смысл функции.
Решил свою проблему следующим образом:
Создал глобальную переменную, которая считает потоки при выходе из for заполнения строк. Соответственно, если поток вышел из цикла заполнения строк, он добавляет к счетчику + 1.
далее поставил while , где через каждую секунду проверяется условие счетчика на количество потоков. Если счетчик равен количество количеству потоков - происходит выход из while.
Далее, условием проверяю номера потоков, если поток первый, то он меняет настройки, сбрасывает счетчик и заходит в цикл заполнения строк. Остальные спят время и тоже заходят в цикл заполнения строк.
Как-то так) Всем спасибо!