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

id
name
total
free

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


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

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

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




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

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

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




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

Не надо.

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

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

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

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

Не надо.

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

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

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

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

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


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

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

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

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

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

По п.2. : сделал первый вариант, все бы хорошо, но UI после нажатия на кнопку морозится.
Как бы сделать, чтобы не замораживался гуй?
...
Рейтинг: 0 / 0
27.11.2013, 19:14
    #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
27.11.2013, 19:27
    #38480531
netivan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как распараллелить в данном случае?
Winnipuh,

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

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

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

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

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

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


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