Próbuję utworzyć metodę WebApi, która wykonuje serię obliczeń pętli, które trudno byłoby dalej optymalizować.Wiele rdzeni dla pojedynczego żądania ASP.net
x.Items.AsParallel().ForAll(item =>
{
item.RunCalcs();
});
Po wykonaniu tego kodu, patrząc na menedżera zadań serwera, wydaje się, że to tylko maxes się jeden rdzeń procesora, pozostawiając pozostałe rdzenie nietknięte.
Z tego, co przeczytałem, asp.net ogranicza pojedyncze żądanie do jednego rdzenia procesora. Ponieważ jest to serwer intranetowy z niewielką liczbą ogólnych żądań, nie jestem zainteresowany zarządzaniem zasobami serwera.
Czy istnieje sposób na obejście lub obejście tego zachowania, aby moja pętla działała szybciej?
Czy próbowałeś ustawić MaxDegreeOfParallelism opcja? Równolegle.ForEach (Items, new ParallelOptions() {MaxDegreeOfParallelism = Environment.ProcessorCount}, item => {...}); –
Czy istnieje możliwość zaprojektowania pętli i uruchomienia różnych wątków w celu rozłożenia obciążenia. Więc jeśli masz kolekcję 1000 przedmiotów odpalić wątek dla pierwszych 500 i inny wątek dla pozostałych 500? – WooHoo
@SK, który wydaje się rozwiązać problem, ale nie jestem pewien, dlaczego, ponieważ myślałem, że PLinq ForAll miał korzystać z maksymalnych dostępnych zasobów. Być może jest inaczej w asp.net. – phosplait