Это странная проблема, о которой я не мог найти много информации о результатах поиска.Parallel.ForEach - первая нить работает медленнее остальных
У меня есть элемент управления listview со списком видеофайлов. Я использую Parallel.ForEach для запуска отдельных потоков для обработки каждого видеофайла по кадру для движения. Каждый цикл через кадры включает в себя некоторые вызовы для обновления элементов управления в форме, которую я предполагаю обработкой основного потока (ID 1).
Что происходит, так это то, что первый файл, который будет обработан, по-видимому, занимает гораздо больше времени, чем остальные, чтобы закончить, по сути, видео файлы с низким разрешением, этот поток зависает полностью, а остальные масштабируют рамку. Иногда этот поток не будет завершен вообще, в то время как остальные работают, хотя остальные файлы.
Я полагаю, что это может быть вызвано, если основной поток используется для обработки и подтягивается вызовами из других потоков.
EDIT: Я заметил, что нить висит полностью, когда открыта другая форма.
Вот скриншот приложения, показывая первый поток работает позади остальных
Код
Parallel.ForEach<ListViewItem>(filesListView.Items.Cast<ListViewItem>(), new ParallelOptions() { MaxDegreeOfParallelism = Convert.ToInt32(Math.Ceiling((Environment.ProcessorCount * 0.75) * 1.0)) }, (item, state) =>
{
Thread.Sleep(100);
if (CallToStop == true)
{
state.Break();
}
internalProcessStart(item);
});
Не может быть размер файла? –
Вы вообще пытались удалить вызовы и проверить, связано ли это? – Zergatul
@ TadijaBagarić Не связан размер файла, я пытался с тем же файлом копироваться снова и снова, и там тоже бывает. – user2924019