Wie kann ich ein Array von Bytes zur (Queue) Warteschlange von Byte effizient in c# hinzufügen oder konkatenieren.
Array[] ---> Queue<byte>
bate [] array={5,6...}
ConcurrentQueue<int> coll = new ConcurrentQueue<int>();
coll.Enqueue(1);
coll.Enqueue(2);
coll.Enqueue(3);
coll.Enqueue(4);
ich möchte eigentlich der Array addieren können sodass der Inhalt der queue so aussehen soll
1 2 3 4 5 6......
Du musst hier wegen der unterschiedlichen Typen die Bytes noch zu int casten.
Im einfachsten Fall kannst du einfach mit einer foreach Schleife die Bytes durchgehen und einfügen.
ConcurrentQueue<int> coll = new ConcurrentQueue<int>();
forech(byte b in bytes)
{
coll.Enqueue((int)b);
}
Doku:
ConcurrentQueue<T> Klasse (System.Collections.Concurrent)
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
hallo,
Vielen Dank,
ich möchte eigentlich die schleife vermeiden, weil sie Zeit aufwendig ist.
da ich von socket blockweise daten lese--> Array von Bytes.
habe ich gedacht, es könnte eine andre weg geben um die schleife zu vermeiden.
data [] von Socket lesen ----> in einem Queue speichern dann von eine andere Thread byteweise rausgeben und bewerten.
Dass Schleifen pauschal langsam sind, ist quatsch.
Vieles hat unter der Haube eine Schleife, obwohl Du das nicht siehst.
Es gibt Mechanismen von Copies und Shadow Copies (zB. Span<T> Struktur (System)), die um Welten mehr bringen als "Schleifen zu vermeiden".
Hier ist eine Schleife vollkommen okay. Bytes sind ohnehin structs.
PS: in .NET verwendet man primär Tasks, keine Threads.
Für die asynchrone und parallele Abarbeitung in .NET gibts das Konzept von DataFlows.
Datenfluss (Task Parallel Library)
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo edilovsky,
data [] von Socket lesen ----> in einem Queue speichern dann von eine andere Thread byteweise rausgeben und bewerten.
Schau dir dazu System.IO.Pipelines in .NET an. Das passt womöglich gut zu deinem Anwendungsfall.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Hallo,
Vielen Danke alle Zusammen,
was die Schleife Angeht---> ich habe keine bessere Lösung gefunden, in C und C++ Welt kann man manchmal mit Zeiger arbeiten wenn man die schleife vermeiden möchte.
das Thema System.IO.Pipelines finde sehr interessant. ich bin dabei jetzt darüber zu lesen.
Viele Grüße
Hallo,
meinst du so etwas?: Byte-Array direkt in ein struct "kopieren"
Also ich würde es mit einer Schleife machen, geht am einfachsten.
byte[] bytes = { 10, 11, 12, 13, 14 };
var coll = new ConcurrentQueue<int>(bytes.Select(b => (int)b));
Was meinst du eigentlich mit
ich möchte eigentlich der Array addieren können
?