Laden...

byte [] in byte Queue Hinzufügen

Erstellt von edilovsky vor 2 Jahren Letzter Beitrag vor 2 Jahren 337 Views
E
edilovsky Themenstarter:in
3 Beiträge seit 2022
vor 2 Jahren
byte [] in byte Queue Hinzufügen

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......

T
2.224 Beiträge seit 2008
vor 2 Jahren

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.

E
edilovsky Themenstarter:in
3 Beiträge seit 2022
vor 2 Jahren

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.

16.835 Beiträge seit 2008
vor 2 Jahren

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)

6.911 Beiträge seit 2009
vor 2 Jahren

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!"

E
edilovsky Themenstarter:in
3 Beiträge seit 2022
vor 2 Jahren

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

190 Beiträge seit 2012
vor 2 Jahren

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

?

  • Wer lesen kann, ist klar im Vorteil
  • Meistens sitzt der Fehler vorm Monitor
  • "Geht nicht" ist keine Fehlermeldung!
  • "Ich kann programmieren" != "Ich habe den Code bei Google gefunden"

GidF