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

  • Автор темы Автор темы loka23
  • Дата начала Дата начала

loka23

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

Суть работы:
Имеется файл excel, В нём содержится 4 сроки:
Маша - не работает
Петя - не работает
Ольга - не работает
Вася - не работает
Иван - не работает

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

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

смена статуса на "не работает" по окончанию действий у меня завязано на good и bad end.
 
используй локи
Да, вот как раз нашел инфу, но не совсем пойму, работает лок только с кодом или для кубиков зенно(для работы с таблицей) тоже работает?
И куда лок добавлять? перед чтением или перед сменой статуса в таблице? В шаблоне 3 действия: чтение, смена статуса, смена статуса в конце работы.
 
Лок на запись.
 
  • Спасибо
Реакции: loka23
Благодарю за ответ, а стандартными кубиками зенно можно это сделать? так скажем чтобы все действия выполнялись на кубиках, а лок кодом перед кубиком? Или это только в коде можно сделать и соответственно нужно знать C#?
Если можно стандартно, в каком месте и какой код правильно добавить на лок таблицы?
 
Последнее редактирование:
  • Спасибо
Реакции: j2082192
Стандартно никак нельзя без C#

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


C#:
Развернуть Свернуть Копировать
    var stroka = project.Variables["string"].Value;
    table.SetCell(1, stroka, "работает");
 
Попробуйте так.
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
Попробуйте так.
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);
тестировал-искал-сработало это, но понятно что это не то.
По ссылке ознакомлюсь для информации.
 

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