ustaw priorytet dla Parallel.For loop
Ok, oto sytuacja: Mój główny / UI wątek (nazwijmy go Thread1) służy do pozyskiwania partii obrazów ze skanera dokumentów phsycial. Po pobraniu partii uruchamiany jest oddzielny wątek „tła” (nazwij go Thread2), aby przetworzyć i zapisać obrazy z tej partii.
Wątek2 (wątek „tła”) używa aParallel.For
pętla, która redukuje czas przetwarzania / oszczędzania obrazu o 70% w stosunku do normalnegoFor
pętla. Wydaje się jednak, że maksymalizuję wszystkie moje procesory, tak że Thread1 nie może rozpocząć pozyskiwania kolejnych obrazów do czasuParallel.For
pętla się kończy.
Czy istnieje sposób na „ograniczenie” aParallel.For
pętla, aby nie zmaksymalizować moich procesorów? Lub ustawić priorytet przetwarzania? Próbowałem ustawieniaThread2.Priority = ThreadPriority.Lowest
, ale to nie wydaje się wpływać na pętlę. Albo nie rozumiem, jakParallel.For
działa pętla? Czy w jakiś sposób blokuje Thread1?
Oto jak nazywam Thread2 z metody w Thread1.
public void SaveWithSettings(bool save) // method in Thread1
{
....
Thread thr = new Thread(ThreadWork); // creating new thread (Thread 2)
thr.Priority = ThreadPriority.Lowest; // does nothing?
thr.Start(new SaveContainer(sc)); // pass a copy as paramater
// misc stuff to make scanning possible again
numBgw++;
twain.RemoveAllImages(); // clear images
imagelist.Clear(); // clear imagelist images
.... // etc. this all appears to process fine while Thread2 is processing
}
Tutaj jest mójThreadWork
metoda:
private void ThreadWork(object data) // executing in Thread2
{
SaveContainer sc = data as SaveContainer; // holds images
bool[] blankIndex = new bool[sc.imagelist.Count]; // to use in Parallel.For loop
for (int i = 0; i < sc.imagelist.Count; i++)
blankIndex[i] = false; // set default value to false (not blank)
Parallel.For(0, sc.imagelist.Count, i => // loop to mark blank images
{
bool x = false; // local vars make loop more efficient
x = sc.IsBlankImage((short)i); // check if image at index i is blank
blankIndex[i] = x; // set if image is blank
}
.... // other image processing steps
}