私はソケットベースの遠隔測定アプリケーションを作成しています。私は2つのラジオモデムを使ってデータを送受信し、1つのアプリケーションはモデム1でデータを、もう1つのプログラムはモデム2、インターバルは1秒ですが、レシーバーアプリ(サーバー)がCPUとRAMのリソース(99%のCPU使用量)の大部分を使用しているようで、メモリ使用量は着実に増加しています。私のプログラムが送信されたデータのいくつかのコピーを受け取っているように見えるので、私の元のデータパケットは約70バイトですが、いくつかの後に、私のプログラムはほとんど応答を停止し、データはまったく正しくないので、データは解析できません。秒そのサイズの増加、私はここにサーバープログラムの私の受信ハンドラがあり、私の受信バッファがいっぱいになると、データが、私はいくつかの提案を探しています以前のデータと混合されると思う:ソケットサーバーが多すぎるリソースを使用しています
private void DataReceive()
{
handler.ReceiveBufferSize = 100;
try
{
byte[] bytes = new byte[100];
int byteRec;
while (true)
{
timer1.Enabled = true;
while (true)
{
byteRec = handler.Receive(bytes);
if (byteRec > 0)
{
data = System.Text.Encoding.UTF8.GetString(bytes, 0, byteRec);
break;
}
}
if (data.Length >= 30)
{
if (data.Substring(0, 1) == "#")//pasrse data, correct!
{
label27.Text = data.Length.ToString();
textBox1.Text = data;
string a = data.Substring(1);
string[] b = a.Split('-');
SetControlPropertyThreadSafe(lblTotal, "Text", b[0]);
SetControlPropertyThreadSafe(lblFlow, "Text", b[1]);
float real_analog2 = (1 - (((20 - float.Parse(b[4]))/(20 - 4)))) * Analog2_Max;
if (real_analog2 < 0)
real_analog2 = 0;
SetControlPropertyThreadSafe(lblAnalog, "Text", real_analog2.ToString());
if (b[2] == "1")//off
SetControlPropertyThreadSafe(lblMotion, "Text", "off");
else if (b[2] == "0")//on
SetControlPropertyThreadSafe(lblMotion, "Text", "on");
if (b[3] == "1")//off
SetControlPropertyThreadSafe(lblMotion2, "Text", "off");
else if (b[3] == "0")//on
SetControlPropertyThreadSafe(lblMotion2, "Text", "on");
SetControlPropertyThreadSafe(lblV1, "Text", b[5]);
SetControlPropertyThreadSafe(lblV2, "Text", b[6]);
SetControlPropertyThreadSafe(lblV3, "Text", b[7]);
SetControlPropertyThreadSafe(lblI1, "Text", b[8]);
SetControlPropertyThreadSafe(lblI2, "Text", b[9]);
SetControlPropertyThreadSafe(lblI3, "Text", b[10]);
SetControlPropertyThreadSafe(lblLevelPercent, "Text", b[11]);
SetControlPropertyThreadSafe(lblLevelValue, "Text", b[12]);
}
}
FillLstMsg(data);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
NetworkStreamを(テキストリーダーとしてStreamReaderを使用して)使用しない特別な理由はありますか? – harold
NetworkStreamはどのように使用できますか?私はちょうどラジオモデムを介してデータを読み取るしたい –
かなり単純な、ちょうど引数としてソケットで新しいものを作成します。 – harold