Подскажите как можно прописать загрузку и сохранение профиля с куками без стандартного экшена

malysh

Client
Регистрация
27.07.2017
Сообщения
420
Благодарностей
55
Баллы
28
Приветствую, столкнулся с проблемой загрузки и сохранения профиля стандартным экшеном, дело в том что в многопотоке, загрузка и сохранения профилей выполняется очень долго, либо виснет, при 30-40 потоках нормально работает, если ближе к 100 потокам происходят зависания, либо работа с профилями происходит очень долго, инстансы могут висеть до 5 минут в надежде загрузить или сохранить профиль.Проблема эта только если потоков 50+, если меньше, то всё корректно работает, подскажите как прописать работу с профилями к примеру на С#
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 421
Баллы
113
при действиях с профилем идет работа с файлами. Если машина довольно слабая, а 50 профилей грузятся одновременно, то естественно будут зависания. Не думаю, что перенос в свой код сильно изменит ситуацию. Надо предусмотреть, чтобы они не начинали загружаться одновременно.
Но оставлю это здесь.
C#:
//загрузка профиля
string path = project.Directory + "\\Profiles\\Profiles\\" + project.Variables["ProfileName"].Value + ".zpprofile";
project.Profile.Load(path, true);
//сохранение профиля
project.Profile.Save(path,true,true,false,true,true,true,true,false,false,"[]");
//удаление профиля
System.IO.File.Delete(path);
 
  • Спасибо
Реакции: malysh

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 785
Благодарностей
2 445
Баллы
113
....в многопотоке, загрузка и сохранения профилей выполняется очень долго, либо виснет .....
... инстансы могут висеть до 5 минут в надежде загрузить или сохранить профиль.....
Диск SSD или HDD?
Действие загрузки/сохранения профиля, которое предоставил Alexmd возможно есть смысл одеть в lock, чтобы вообще запретить профилям загружаться/сохраняться одновременно - пусть встают в очередь - может быть это решит данную проблему (если каких-то других логических ошибок в шаблоне нет).

Не думаю, что перенос в свой код сильно изменит ситуацию. Надо предусмотреть, чтобы они не начинали загружаться одновременно.
Изменит конечно - в коде можно действие одеть в lock и принудительно заставить выполнять это действие в один поток, а вот как поступить с кубиком (мы же точно не знаем, как именно он отрабатывает - лочит потоки или нет)...
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 715
Баллы
113
обычно операция с профилем занимает 5-12 секунд. в локе 100 профилей это 500-1200 (8-20 минут) и это при условии что в профиль маленький и у него нет проблем. а если сюда наложить возможные проблемы с инстансом... то текущие 5-10 минут на операцию с профилем это еще цветочки.
можно исключить проблему скорости диска, создать RAM диск и поработать с ним. если станет лучше, то проблема в скорости файловой системы.
если нет, то скорее всего проблема уже в инстанстах.
еще можно во всех шаблонах сделать опрос специальной таблицы, если там больше например 10 строк то ждать, а если меньше то записать туда имя своего сохраняемого файла и начинать запись. после записи удалить свою запись. таким образом не больше 10 шаблонов одновременно будут писать профиля. правда желательно еще метку времени добавить, на всякий случай. и перед проверкой удалять записи с таймштампом больше 30 минут. ну вдруг шаблон вылетит до удаления записи.
если и такой метод не поможет то значит тормозят сами инстансы когда их становиться много. ведь самое затратное по времени это обращение к инстансам, а при сохранении профиля идет нереальное считывание информации оттуда.
 

malysh

Client
Регистрация
27.07.2017
Сообщения
420
Благодарностей
55
Баллы
28
Диск SSD или HDD?
Действие загрузки/сохранения профиля, которое предоставил Alexmd возможно есть смысл одеть в lock, чтобы вообще запретить профилям загружаться/сохраняться одновременно - пусть встают в очередь - может быть это решит данную проблему (если каких-то других логических ошибок в шаблоне нет).


Изменит конечно - в коде можно действие одеть в lock и принудительно заставить выполнять это действие в один поток, а вот как поступить с кубиком (мы же точно не знаем, как именно он отрабатывает - лочит потоки или нет)...
У меня 2 сервака, на одном HDD, на другом SDD диски, но разницы нет, что там, что там такая проблема в многопотоке
 

malysh

Client
Регистрация
27.07.2017
Сообщения
420
Благодарностей
55
Баллы
28
при действиях с профилем идет работа с файлами. Если машина довольно слабая, а 50 профилей грузятся одновременно, то естественно будут зависания. Не думаю, что перенос в свой код сильно изменит ситуацию. Надо предусмотреть, чтобы они не начинали загружаться одновременно.
Но оставлю это здесь.
C#:
//загрузка профиля
string path = project.Directory + "\\Profiles\\Profiles\\" + project.Variables["ProfileName"].Value + ".zpprofile";
project.Profile.Load(path, true);
//сохранение профиля
project.Profile.Save(path,true,true,false,true,true,true,true,false,false,"[]");
//удаление профиля
System.IO.File.Delete(path);
спасибо, протестирую
 

malysh

Client
Регистрация
27.07.2017
Сообщения
420
Благодарностей
55
Баллы
28
при действиях с профилем идет работа с файлами. Если машина довольно слабая, а 50 профилей грузятся одновременно, то естественно будут зависания. Не думаю, что перенос в свой код сильно изменит ситуацию. Надо предусмотреть, чтобы они не начинали загружаться одновременно.
Но оставлю это здесь.
C#:
//загрузка профиля
string path = project.Directory + "\\Profiles\\Profiles\\" + project.Variables["ProfileName"].Value + ".zpprofile";
project.Profile.Load(path, true);
//сохранение профиля
project.Profile.Save(path,true,true,false,true,true,true,true,false,false,"[]");
//удаление профиля
System.IO.File.Delete(path);
Проблема решена, спасибо огромное, видимо в стандартном кубике стояло ограничение на загрузку, теперь всё шикарно, есть вопрос, этим кодом он профили сохраняет с прокси и со всеми переменными??
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 421
Баллы
113
...есть вопрос, этим кодом он профили сохраняет с прокси и со всеми переменными??
Когда добавите его в редактор, воспользуйтесь всплывающей подсказкой и выберите что надо сохранять. Переменные для сохранения указываются в массиве в таком виде:
project.Profile.Save(path,true,true,false,true,true,true,true,false,false,new string[]{"имя1", "имя2"});
Или сохранить сразу все переменные проекта
project.Profile.Save(path,true,true,false,true,true,true,true,false,false,project.Variables.Keys.ToArray());
 
Последнее редактирование:

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)