Hello!Threading verschachtelte foreach-loops?
Ich versuche ein Programm zu erstellen, das die beste Punktzahl aus einer Vielzahl von Elementen mit Bruteforce berechnet. Und ich glaube, dass die Geschwindigkeit, mit der dies berechnet wird, auf Systemen mit Multicore-CPUs mit Hilfe von Threading verbessert werden kann. Korrigiere mich, wenn ich falsch liege. Aber wie erreiche ich das?
Hier ist ein Teil meines Codes, und es macht den Job gut (kein Threading).
private double _bestScore = 0.0;
private void BruteForce()
{
foreach (Stats head in _heads)
foreach (Stats chest in _chests)
foreach (Stats leg in _legs)
foreach (Stats feet in _feets)
{
int stamina = head.sta + chest.sta + leg.sta + feet.sta;
int power = head.power + chest.power + leg.power + feet.power;
int armor = head.armor + chest.armor + leg.armor + feet.armor;
int hit = head.hit + chest.hit + leg.hit + feet.hit;
double total = stamina * _scaleSta + power * _scalePower + armor * _scaleArmor;
if (total > _bestScore && hit >= 100)
{
_bestScore = total;
// Store best setup for output when done with bruteforce
_bestHead = head;
_bestChest = chest;
_bestLeg = leg;
_bestFeet = feet;
}
}
}
Also, gibt es sowieso, um dies mit Threading zu verbessern?
Edit: Typo korrigiert und aktualisiert, um einen anderen stat, Treffer zu enthalten. Treffer muss 100 erreichen, um ein möglicher Teil des "besten Ergebnisses" zu sein. Dies ist der Fall, da ich nicht jeden einzelnen Slot überprüfen kann, um die beste Ausrüstung zu finden. Treffer ist ein sehr wichtiger Wert bis 100, aber jeder Punkt nach 100 ist nutzlos. Auch dieser Teil meines Codes hat viel mehr foreach-Schleifen (28 statt 4). So ist die Anzahl der Iterationen eine Menge. Jede Liste (_heads, _chests usw.) enthält jedoch normalerweise maximal 2 Elemente.
Schöne Frage. Ich freue mich darauf, die Antworten zu sehen. – harriyott
Wie lange dauert das normalerweise? Denken Sie daran, es gibt Overhead mit Multithreading und esp spinning die Threads zu Beginn der Arbeit. Nebenbei bemerkt verschachtelte Schleifen macht den Code schwerer zu lesen, die Art, wie Andy schreibt seinen Code ist viel sauberer und einfacher zu lesen. – EKS