Frage

Ich erwäge mit UnmanagedMemoryStream statt Memory für mit eingehenden (und vielleicht auch ausgehende?), die sich Pakete in einem Netzwerkserver. Was ich zu erreichen hoffen, ist weniger von Werten zu kopieren, und wenn möglich, vermeiden Sie das Kopieren auf den Heap (zu viel).

Zum Beispiel für ein eingehendes Paket, könnte man tun:

fixed (byte* p = &data) // where data comes from a socket receive
{
    using (var stream = new UnmanagedMemoryStream(p, data.Length))
    {
        // do handling here...
    }
}

Trotzdem bin ich nicht ganz sicher, ob es eine realistische Nutzen ist dies zu tun. Könnte jemand mit etwas Feedback kommen, ob oder nicht diese dabei einen beliebigen Wert sein würde, anstatt mit dem guten alten verwalteten Memory?

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Nein, Sie nicht verbessern, was schon da ist. Ein byte [] ist ein Referenztyp. Sie können sie einfach auf den Memorystream (byte []) Konstruktor übergeben und nicht Daten werden kopiert zu werden. MS speichert einfach einen Verweis auf das gleiche Array.

In der Tat, Sie haben es noch schlimmer, weil Sie das Array gepinnt. eine Garbage Collection immer im Inneren des Körpers des Schnipsel laufen nicht unwahrscheinlich ist, werden Sie Dinge aus dem Array lesen und werden wahrscheinlich Objekte aus den Daten, Streichern und was nicht zu schaffen. Der Garbage Collector Bedürfnisse des gepinnten Array arbeiten um, so dass seine Lebensdauer erheblich erschwert. Dies kann tatsächlich die perf Ihres Programms für eine Weile beeinflussen, die Heap-Kompaktierung wichtig ist die CPU-Cache effizienter zu machen.

Andere Tipps

wie das klingt vorzeitige Optimierung zu mir. Haben Sie verwendet Memorystream und eine Profilierung getan zu zeigen, dass es verursacht Sie greifbare, messbare Performance-Probleme?

Ich würde mit dem herkömmlichen Memory bleiben und mir die Kopfschmerzen sparen, bis es klar wurde (durch Profilieren), dass es Änderungen notwendig war.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top