Laden...

[gelöst] Wie am besten unbekannte Zahl von bytes aus einemSocket empfangen

Erstellt von pdelvo vor 15 Jahren Letzter Beitrag vor 15 Jahren 852 Views
pdelvo Themenstarter:in
1.346 Beiträge seit 2008
vor 15 Jahren
[gelöst] Wie am besten unbekannte Zahl von bytes aus einemSocket empfangen

Hallo Community,

Ich arbeite ja gerade an HTMLCP nur gefällt mir die Performance nicht so ganz. Ich habe jetzt das erstellen der Assemblies gecached. Das bringt einen performancevorteil von ca 90%. Außerdem habe ich gemessen, dass das empfangen des Requestheaders 0,5s. braucht. Das ist deutlich zu viel. Außerdem finde ich meine Methode ziemlich unsauber:

client.ReceiveBufferSize = 1000;
                client.ReceiveTimeout = 10;
                List<byte> bytes = new List<byte>();
                byte[] buffer = new byte[1000];
                try
                {
                    while (client.Receive(buffer) > 0)
                    {
                        bytes.AddRange(buffer);
                        buffer = new byte[10000];
                    }
                }
                catch
                {
                    buffer = bytes.ToArray();
                }

Nun wollte ich fragen, ob, und wenn ja, wie man das optimieren kann.

Gruß pdelvo

479 Beiträge seit 2008
vor 15 Jahren

Hallo pdelvo,

Es gibt Socket.Available. Dort stehen IMHO die Anzahl Bytes die noch nicht gelesen wurden.

mfg.
markus111

[Follow me on Twitter](http://twitter.com/blendingsky)
pdelvo Themenstarter:in
1.346 Beiträge seit 2008
vor 15 Jahren

Und wie soll ich das deiner meinung nach einbauen. meinst du das in etwa so?


int prev = 0;
while(prev != client.Aviable)
{
prev = client.Aviable;
}

byte[] buffer = new byte[client.Aviable];
...

ICh glaube nicht, dass das sinnvoll ist. Wenn er einmal kein neuer byte angekommen ist, bricht er ab. dann fehlen zeichen im request.

Gruß pdelvo

pdelvo Themenstarter:in
1.346 Beiträge seit 2008
vor 15 Jahren

Ich muss mich entschuldigen. GEnau das funktioniert perfekt!
HIer meine Zeiten(erstes ist empfangen des HEaders, zweites das parsen des htmlcp codes, beides in Sekunden):

0,0005414
0,027501

Vor meinen optimierungen waren es

0,5099871
0,3315015

Gruß pdelvo