- Apple asztali gépek
- Milyen videókártyát?
- Majdnem 20 évvel később befejezték a rajongók a PC-s Grand Theft Auto IV-et
- Milyen notebookot vegyek?
- Projektor topic
- Milyen billentyűzetet vegyek?
- Azonnali fotós kérdések órája
- Elhagyja a 32 bites módot a Steam
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Szünetmentes tápegységek (UPS)
Új hozzászólás Aktív témák
-
joysefke
veterán
Sziasztok, csináltam egy példa kódot List<List<Color>> struktúra létrehozására. Tudom, hogy a listakreálás lassú, stb, de szükségem van a felxibilitására.
Készítettem egy benchmarkot úgy hogy párhuzamosság nélkül kreálok egy 4000 elemű List<> szerkezetet amit List<Color> elemeket tartalmaz (4000 elemű lista üres List<Color> elemekkel). Majd ugyanezt a listát megkreálom 250 elemű szublisták konkatenálásával, melyeket külön taskonként asszinkron módon hozok létre.
A kód változtatás és többletmunka nélkül fordul Visual Studióban
azt látom, hogy a párhuzamosítással nem tudok érdemi sebességelőnyt elérni. Én csinálok valamit nagyon rosszul, vagy a .NET olyan ravasz, hogy a List<List<>> kreálását már magától párhuzamosan végzi???
Előre is köszi !
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.Diagnostics;
namespace ConsoleApp30
{
class Program
{
private const int width = 4000;
private const int height = 3000;
//Ez lesz a delegate függvény a Taskok megkreálásához
static public List<List<Color>> createSublist (int n, int height)
{
List<List<Color>> result = new List<List<Color>>(n);
for (int i = 0; i< n; ++i)
{
result.Add(new List<Color>(height));
}
return result;
}
static void Main(string[] args)
{
Stopwatch stopwatch = new Stopwatch();
Stopwatch stopwatch1 = new Stopwatch();
List<List<Color>> pixelList = new List<List<Color>>(width);
//Listakreálás párhuzamosítás nélkül
stopwatch.Start();
for (int i = 0; i < width; ++i)
{
pixelList.Add(new List<Color>(height));
}
stopwatch.Stop();
Console.WriteLine("Sequential :" + stopwatch.ElapsedMilliseconds);
stopwatch.Reset();
int numOfCores = Environment.ProcessorCount;
int numOfTasks = numOfCores * 4;
Task<List<List<Color>>>[] tasks = new Task<List<List<Color>>>[numOfTasks];
long[] threadCreations = new long[numOfTasks];
stopwatch.Start();
for (int i= 0; i< numOfTasks; ++i)
{
stopwatch1.Start();
tasks[i] = new Task<List<List<Color>>> (() => createSublist(width / numOfTasks, height));
stopwatch1.Stop();
threadCreations[i] = stopwatch1.ElapsedMilliseconds;
stopwatch1.Reset();
}
for (int i=0; i< numOfTasks; ++i)
{
tasks[i].Start();
}
for (int i = 0; i < numOfTasks; ++i)
{
Console.WriteLine("Task nr {0} state: {1}", i, tasks[i].Status.ToString());
}
Task.WaitAll(tasks);
stopwatch.Stop();
Console.WriteLine("Creating {0} sublists in parallel took: {1} ms", numOfTasks, stopwatch.ElapsedMilliseconds);
stopwatch.Reset();
for (int i = 0; i < numOfTasks; ++i) {
Console.WriteLine("Creating task nr {0} took: {1} ms", numOfTasks, threadCreations[i]);
}
stopwatch.Start();
IEnumerable<List<Color>> result = tasks[0].Result.AsEnumerable();
for (int i = 1; i < numOfTasks; ++i)
{
result = result.Concat(tasks[i].Result);
}
var cList = result.ToList();
stopwatch.Stop();
Console.WriteLine("Concat of {0} Lists took :{1} ms", numOfTasks, stopwatch.ElapsedMilliseconds);
stopwatch.Reset();
}
}
}
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Huawei Watch 4 Pro - kívül-belül domborít
- One otthoni szolgáltatások (TV, internet, telefon)
- GL.iNet Flint 2 (GL-MT6000) router
- Jogász topic
- iPhone topik
- Windows Insider Program
- Apple asztali gépek
- Milyen videókártyát?
- Folyószámla, bankszámla, bankváltás, külföldi kártyahasználat
- exHWSW - Értünk mindenhez IS
- További aktív témák...
- Lenovo ThinkPad dokkolók: USB-C 40A9/ 40AY/ 40AS/ Thunderbolt 3 40AC/ Hybrid USB-C DisplayLink 40AF
- Gamer PC-Számítógép! Csere-Beszámítás! I5 9400F / RTX 2060 / 16GB DDR4 / 250SSD+500HDD
- Samsung Galaxy S22 Ultra 5G 256GB, Kártyafüggetlen, 1 Év Garanciával
- GYÖNYÖRŰ iPhone 13 mini 128GB Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS3047, 94% Akkumulátor
- Új és régi konzolok Okosítása/Softmodoloása, és Szoftveres szintű javítása - RÉSZLETEK A LEÍRÁSBAN
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft.
Város: Budapest