kullanarak minimumlar arasında seçim yapma C#, Parallel.ForEach
ve .NET genel olarak yeni. Binlerce yeri içeren bir aramayı paralel hale getirmek istiyorum. Her konum için büyük daire mesafesini hesaplıyorum. Bu, farklı çekirdeklere yayılmak istediğim bir hesap. Sorum şu, bu MSDN TPL example'da olduğu gibi yalnızca bir iş parçacığı değişkeni varsa bunu nasıl yapabilirim? sonuç için, ben Interlocked
baktı ve onun seçenekleri Add
, CompareExchange
, Decrement
, Exchange
, Increment
ve Read
gördüm, ama sadece arttırarak, azaltarak veya eşitlik test ekleyerek değilim. Nesneyi, paralel olarak çalışan birkaç iş parçacığı üzerinde döndürmek istiyorum. Bu, en kısa toplam uzaklığa sahip. Benim bağırsak bu kolay olmalı, ben bir Location
ve bir mesafe sarar bazı küçük bir nesne oluşturmak mümkün olmalıdır diyor, ama ben her iş parçacığı en iyi yanıtı ve sonra aralarında en kısa mesafeyi nasıl seçerim? İşte paralel olmayan versiyonu:Parallel.ForEach
Location findClosestLocation(Location myLocation, List<Location> allLocations)
{
double closest = double.MaxValue;
Location closestLoc = null;
foreach (Location aLoc in allLocations)
{
if (aLoc != myLocation)
{
double d = greatCircle(myLocation, aLoc);
if (d < closest)
{
closest = d;
closestLoc = aLoc;
}
}
}
return closestLoc;
}
İyi tavsiyelerde gibiydi bir DDJ Blog Post gördün, ama en iyi tavsiye olmadığını merak etti. Yazarın diziler üzerinde döngü yaptığını görüyorum ve bunu yapmanın daha işlevsel bir yolu olup olmadığını merak ediyorum. Fonksiyonel dünyada map
, lambda
ve min
kullanırdım.
Vay, bu kadar kısa ve tatlı. Fonksiyonel kalbimi şarkı söylüyor. Teşekkürler! – gknauth
@gknauth: Evet - (Doğru/performans) Parallel.ForEach seçeneğini de ekledim. Öğrenmeyi öneririm ** diğer seçenek nasıl çalışır ve onu anlamaya çalışmak. Yine de, bu operasyonların çoğu için, PLINQ'ı harika olduğu için kullanıyorum. –
Beni blogunuza bağladığınız için teşekkürler, harika görünüyor. Bir kitap yaz, ben alırım! Ya da çok fazla çalışırsa, sana akşam yemeği alırım. – gknauth