powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как распараллелить в данном случае?
14 сообщений из 14, страница 1 из 1
Как распараллелить в данном случае?
    #38480358
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть массив объектов, содержащий N объектов типа

id
name
total
free

здесь name - сетевой путь.


Как параллельно запустить опрос шар и заполнить total и free?
Т.е. практически получается N одинаковых задач с разными параметрами...
...
Рейтинг: 0 / 0
Как распараллелить в данном случае?
    #38480377
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh,
в чем проблема?

Код: c#
1.
Parallel. Foreach(listXXX, item =>  var d = GetData(itemName); item.Total = d.Value ....);
...
Рейтинг: 0 / 0
Как распараллелить в данном случае?
    #38480389
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanWinnipuh,
в чем проблема?

Код: c#
1.
Parallel. Foreach(listXXX, item =>  var d = GetData(itemName); item.Total = d.Value ....);




надо наверное как-то ограничить количество, если будет много элементво в списке?
Если скажем 1000...
...
Рейтинг: 0 / 0
Как распараллелить в данном случае?
    #38480402
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh,

Не надо.
...
Рейтинг: 0 / 0
Как распараллелить в данном случае?
    #38480405
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WinnipuhnetivanWinnipuh,
в чем проблема?

Код: c#
1.
Parallel. Foreach(listXXX, item =>  var d = GetData(itemName); item.Total = d.Value ....);




надо наверное как-то ограничить количество, если будет много элементво в списке?
Если скажем 1000...
пул потоков ограничит.
...
Рейтинг: 0 / 0
Как распараллелить в данном случае?
    #38480407
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, еще, запрос шар я бы сделал асинхронным.
...
Рейтинг: 0 / 0
Как распараллелить в данном случае?
    #38480411
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Winnipuh,

Не надо.

ок, еще пара вопросов:

1.надо ли вместо List<> использовать что-то из Concurrent Collection?
поскольку придется каждой задаче писать полученные даные обратно

2. как проверить все ли задачи завершились?
...
Рейтинг: 0 / 0
Как распараллелить в данном случае?
    #38480416
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanда, еще, запрос шар я бы сделал асинхронным.

что значит асинхронным? begin invoke?
...
Рейтинг: 0 / 0
Как распараллелить в данном случае?
    #38480444
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WinnipuhArm79Winnipuh,

Не надо.

ок, еще пара вопросов:

1.надо ли вместо List<> использовать что-то из Concurrent Collection?
поскольку придется каждой задаче писать полученные даные обратно

2. как проверить все ли задачи завершились?

1) Нет, достаточно IEnumerable. Менеджер сам раскидает. Или можно самому раскидывать, см. OrderablePartitioner (но я бы не заморачивался)

2) Parallel.ForEach сам подождет завершения всех задач
...
Рейтинг: 0 / 0
Как распараллелить в данном случае?
    #38480471
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Winnipuhпропущено...


ок, еще пара вопросов:

1.надо ли вместо List<> использовать что-то из Concurrent Collection?
поскольку придется каждой задаче писать полученные даные обратно

2. как проверить все ли задачи завершились?

1) Нет, достаточно IEnumerable. Менеджер сам раскидает. Или можно самому раскидывать, см. OrderablePartitioner (но я бы не заморачивался)

2) Parallel.ForEach сам подождет завершения всех задач

По п.2. : сделал первый вариант, все бы хорошо, но UI после нажатия на кнопку морозится.
Как бы сделать, чтобы не замораживался гуй?
...
Рейтинг: 0 / 0
Как распараллелить в данном случае?
    #38480507
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо!


сделал так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
private void RunParallel()
{
            ui = TaskScheduler.FromCurrentSynchronizationContext();
            DateTime start = DateTime.Now;
            Task.Factory.StartNew(RunForEach)
                .ContinueWith(task =>
                {
                    task.Wait(); // Ensure errors are propogated to the UI thread.
                    Text = (DateTime.Now - start).ToString();
                }, ui);
}
...
Рейтинг: 0 / 0
Как распараллелить в данном случае?
    #38480531
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh,

чего-то task.Wait(); смущает. Ведь там у вас в цикле все выполнится и вернется результат, который передадите в Гуй в его контексте исполнения...
...
Рейтинг: 0 / 0
Как распараллелить в данном случае?
    #38480686
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WinnipuhКак бы сделать, чтобы не замораживался гуй?

Я не великий специалист по ГУЙ, но краем уха слышал, что во избежание проблем с ним юзают BackgroundWorker

А вот в нем можно и Parallel.ForEach, и PLINQ

Конкретно в вашем случае я бы тасками не заморачивался.

ЗЫ На случай зависания обработки посмотрите CancellationToken и CancellationTokenSource
...
Рейтинг: 0 / 0
Как распараллелить в данном случае?
    #38480708
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10 конкурирующих потоков
Код: c#
1.
Parallel.Invoke(Enumerable.Range(1, 10).Select(d => new Action(() => { })).ToArray());

...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как распараллелить в данном случае?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]