Merge pull request #1304 from slluis/mac-proxy-autoconfig
[mono.git] / mcs / class / System.Core / System.Linq.Parallel / ParallelExecuter.cs
index 96a5fe1f8e3f7d10c24b84cda5d57a66d17c14d6..d1d639b9a140e6826d5d19c4590e443dbf89609c 100644 (file)
@@ -230,18 +230,23 @@ namespace System.Linq.Parallel
                                var implementerToken = options.ImplementerToken;
 
                                try {
+                                       // Avoid cache thrashing of locals array
+                                       var local = locals [index];
+
                                        if (seedFunc == null) {
                                                if (!enumerator.MoveNext ())
                                                        return;
-                                               locals[index] = (U)(object)enumerator.Current;
+                                               local = (U)(object)enumerator.Current;
                                        }
 
                                        while (enumerator.MoveNext ()) {
                                                if (implementerToken.IsCancellationRequested)
                                                        break;
                                                token.ThrowIfCancellationRequested ();
-                                               locals[index] = localCall (locals[index], enumerator.Current);
+                                               local = localCall (local, enumerator.Current);
                                        }
+
+                                       locals [index] = local;
                                } finally {
                                        enumerator.Dispose ();
                                }