ウェブカメラの小さな画像(〜0.5MB)をクライアントに毎秒25フレームで送信するシンプルなWebサーバーを作成しました。しかし、実行時にはかなり長い遅延(LAN上で2秒と見積もられています)があり、タスクマネージャーを使用して帯域幅の使用状況を確認すると100mbpsの帯域幅の100%を利用します。私はC#/ .NETにはまだまだ慣れていません。これはメインのサーバーループです。C#MemoryStream TCP/IP帯域幅を超過する
image = grabBitmapBlocking();
// Console.WriteLine("FPS: " + Aruco.FpsCounter.CalculateFrameRate());
//image.RotateFlip(RotateFlipType.RotateNoneFlipX);
// save it to jpeg using quality options
m.Position = 10;
image.Save(m, myImageCodecInfo, myEncoderParameters);
// Send the length as a fixed length string
m.Position = 0;
m.Write(Encoding.ASCII.GetBytes((m.Length - 10).ToString("d8") + "\r\n"), 0, 10);
Console.WriteLine("sent " + m.Length + " bytes or " + m.Length/1e6 + " megabytes");
// send the jpeg image
serv.SendToAll(m);
// Empty the stream
m.SetLength(0);
// remove the image from memory
image.Dispose();
image = null;
誰でも私に可能性のある問題がありますか?
ありがとうございます。
将来は投稿の書式設定にもっと力を入れてください。あなたは投稿をたくさん作成しました。投稿を見やすくするために他人に頼るのではなく、投稿をする前にプレビューを見て、エディタの使い方を理解するのに十分簡単です。 –
'serv.SendToAll(m);は何ですか?この行を削除するとパフォーマンスの問題がなくなります(機能の損失は無視されます) –
実際、基本的にはスニペットではなく[mcve]が必要です。ストリームの大きさなどについて何も教えていないのですが... https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/ –