Скорость работы с таблицей(многопоток)

loka23

Client
Регистрация
02.08.2019
Сообщения
134
Благодарностей
10
Баллы
18
Доброго времени.
Как можно оптимизировать работу таблицей эксель, возможно есть какие либо другие идеи для данной реализации?

Суть работы:
Имеется файл excel, В нём содержится 4 сроки:
Маша - не работает
Петя - не работает
Ольга - не работает
Вася - не работает
Иван - не работает
При работе в многопоточном режиме(5 потоков) происходит поиск по таблице, кто не работает - берём данное имя и меняем значение на "работает".
Поток 1: Меняем Маше статус на "работает"
Поток 2: Ищем по второму столбцу кто не работает и берём его
Поток 3: Ищем по второму столбцу кто не работает и берём его
Поток 2: Меняем Петя статус на "работает"
Поток 1: В конце работы меняем статус Маше на "не работает"
Поток 2: В конце работы меняем статус Пете на "не работает"

Принцип работы такой, но вот видимо из за работы в многопотоке с таблицей(ведь каждый поток ищет по столбцу "занятности" не работающих людей, другие потоки меняют статусы) не успевают корректно работать друг с другом и получается так, что кто то в итоге остается в статусе "работает".

смена статуса на "не работает" по окончанию действий у меня завязано на good и bad end.
 

alex1988

Client
Регистрация
13.07.2014
Сообщения
379
Благодарностей
157
Баллы
43
используй локи
 
  • Спасибо
Реакции: loka23

loka23

Client
Регистрация
02.08.2019
Сообщения
134
Благодарностей
10
Баллы
18
Да, вот как раз нашел инфу, но не совсем пойму, работает лок только с кодом или для кубиков зенно(для работы с таблицей) тоже работает?
И куда лок добавлять? перед чтением или перед сменой статуса в таблице? В шаблоне 3 действия: чтение, смена статуса, смена статуса в конце работы.
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
Лок на запись.
 
  • Спасибо
Реакции: loka23

loka23

Client
Регистрация
02.08.2019
Сообщения
134
Благодарностей
10
Баллы
18
Благодарю за ответ, а стандартными кубиками зенно можно это сделать? так скажем чтобы все действия выполнялись на кубиках, а лок кодом перед кубиком? Или это только в коде можно сделать и соответственно нужно знать C#?
Если можно стандартно, в каком месте и какой код правильно добавить на лок таблицы?
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Последнее редактирование:
  • Спасибо
Реакции: j2082192

loka23

Client
Регистрация
02.08.2019
Сообщения
134
Благодарностей
10
Баллы
18
Стандартно никак нельзя без C#

Вот снипеты на C#, которые вам пригодятся
Благодарю, но по работе с ячейкой и поиску по столбцам пришлось другое использовать, не зная C#.
Можете подсказать как правильно записать переменную в коде?
stroka - в скобках как переменная не работает.


C#:
    var stroka = project.Variables["string"].Value;
    table.SetCell(1, stroka, "работает");
 

K R

Client
Регистрация
14.01.2017
Сообщения
127
Благодарностей
127
Баллы
43
Попробуйте так.
int stroka = Convert.ToInt32(project.Variables["string"].Value);

Если наведёте курсор на SetCell, то можете увидеть, что метод принимает номер строки как тип int.

127186

Переменные в зенке имеют тип string, и когда вы передаёте значение этой переменной в переменную без явного типа var, компилятор не догадывается, что вы имеете в виду тип int и пытается передать в метод SetCell переменную stroka как тип string. Из-за этого возникает ошибка и код не работает. Нужно явно задать переменной stroka тип int, и конвертировать в этот тип переменную project.Variables["string"].Value.

Вот здесь можете почитать подробнее о типах переменных в C#.
 
  • Спасибо
Реакции: loka23

loka23

Client
Регистрация
02.08.2019
Сообщения
134
Благодарностей
10
Баллы
18
Попробуйте так.
int stroka = Convert.ToInt32(project.Variables["string"].Value);

Если наведёте курсор на SetCell, то можете увидеть, что метод принимает номер строки как тип int.

Посмотреть вложение 127186

Переменные в зенке имеют тип string, и когда вы передаёте значение этой переменной в переменную без явного типа var, компилятор не догадывается, что вы имеете в виду тип int и пытается передать в метод SetCell переменную stroka как тип string. Из-за этого возникает ошибка и код не работает. Нужно явно задать переменной stroka тип int, и конвертировать в этот тип переменную project.Variables["string"].Value.

Вот здесь можете почитать подробнее о типах переменных в C#.
Благодарю. Да int задавал, но без конвертации так же ошибку выдавало.

C#:
int stroka = int.Parse(project.Variables["string"].Value);
тестировал-искал-сработало это, но понятно что это не то.
По ссылке ознакомлюсь для информации.
 

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