Выполнение ForEach - PullRequest
       5

Выполнение ForEach

0 голосов
/ 11 октября 2011

Мне нужно повысить производительность ForEach.

//Pseudocode
foreach (item i item in items)
{
//Call service to open DB conn and get data
}

В этом цикле вызовите сервис, который открывает сеанс sqlserver, получает данные из базы данных и закрывает сеанс, поэтому для каждогоитерация.Что я могу сделать?.Спасибо.

Ответы [ 2 ]

2 голосов
/ 11 октября 2011

Ну, это звучит как очень хорошее использование Parallel.ForEach - так вы пробовали это?

Parallel.ForEach(queries, query => {
    // Perform query
});

Возможно, вы захотите указать параметры для уровня параллелизма и т. Д. И убедитесь, что ваш пул соединений поддерживает столько соединений, сколько вы хотите. И, конечно же, измерьте производительность до и после, чтобы убедиться, что она действительно помогает.

1 голос
/ 11 октября 2011

Возможно, вы могли бы начать новый поток в каждой итерации:

foreach (item i in collection)
{
    Thread t = new Thread(functionToCall);
    t.Start()
}

functionToCall()
{
    database = openSQLSession();
    data databaseData = database.getData();
    dataCollection.Add(databaseData);
    closeSQLSession();
}

Конечно, это простой пример и довольно псевдокод-у, но я надеюсь, вы понимаете суть этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...