Ограничение на длину List внутри Parallel.For
Мне нужно выполнить итерацию от 1 до 1млн. Сгруппировать их до 1000 и отправить в метод. Чтобы повысить производительность, я использую Parallerl.for. Суть вопроса заключается в том, что бывают случаи, когда условие _user Ids.Count==1000 не выполняется, потому что его длина уже больше 1000. Вот код:
var _usrsIds = new ConcurrentBag<long>();
Console.WriteLine($"{DateTime.Now.ToLocalTime()}:Start");
Parallel.For(1, 1000000000, usrId =>
{
if (_usrsIds.Count == 1000)
AddUsersToDB(_usrsIds);
else
{
lock (this)
{
_usrsIds.Add(usrId);
}
}
});
Console.WriteLine($"{DateTime.Now.ToLocalTime()}:End");
Ответы (1 шт):
Автор решения: tym32167
→ Ссылка
Вы как то неправильно используете parallel.for - он для каких то осязаемых задач существует, а не для простого инкремента.
Если так надо прямо генерить по 1000 штук, можно поступить проще, не блокируя ничего нигде, пример
Parallel.For(0, 1000000, prefix =>
{
var list = new List<int>();
for (int i = 0; i < 1000; i++) list.Add(prefix * 1000 + i);
AddUsersToDB(list);
});
Как избавиться от элемента с id=0, думаю, сами догадаетесь =)