Мой вопрос касается некоторого кода Parallel.ForEach, который работал без сбоев, и теперь, когда наша база данных выросла в 5 раз, она почти регулярно ломается.
Parallel.ForEach<Stock_ListAllResult>( lbStockList.SelectedItems.Cast<Stock_ListAllResult>(), SelectedStock =>
{
ComputeTipDown( SelectedStock.Symbol );
} );
Метод ComputeTipDown () получает все ежедневные биржевые данные для символа, выполняет итерацию по каждому дню, получает вчерашние данные и выполняет несколько расчетов, а затем вставляет их в базу данных на каждый день.
Мы редко используем это для пересчета значений статических данных при изменении формулы.
Исключением является следующее:
База данных, в которую мы попали, имеет 16 гигабайт оперативной памяти и представляет собой двойной четырехъядерный процессор, и никто не использовал систему, пока я пересчитывал. Компьютер, на котором запущено приложение для регенерации кода, представляет собой ноутбук с 12 гигабайтами оперативной памяти с восьмеричным ядром с гиперпоточностью. Таким образом, не было очевидного конфликта ресурсов.
Это мой опыт использования .NET 4 и параллельной обработки, поэтому мне интересно, есть ли что-то, чего мне не хватает. Любые мысли приветствуются.