7

ポートからバイトを読み取るために、C# で .Net SerialPort クラスを使用しています。DataReceived イベントを受信したら、シリアル ポートをチェックして、読み取り可能なバイトがあるかどうかを確認します。ただし、バイトが使用可能な場合でも、ポートが 1 バイトを読み取るのに 0.5 秒以上かかる場合があります。コードはおおよそ次のとおりです。

...
while(Port.BytesToRead > 0) 
{
    StopWatch.Restart();
    Int32 BytesRead = Port.Read(Read, 0, 1);
    StopWatch.Stop();
    if (StopWatch.ElapsedMilliseconds > 100)
    {
    // Record the time. The stopwatch code
    // was only added after performance issues were observed.
    }
}

私が測定した時間は、すべてのバイトを読み取る時間ではなく、1 バイトを読み取る時間であることに注意してください。頻繁に DataReceived イベントを受け取り、最初のバイトが読み取られるまで 0.5 秒待たなければなりません。

ポートの ReadTimeout プロパティを小さい値に設定して無期限に放置しないように実際に試してみましたが、このプロパティは無視されているようです。

どんな助けでも大歓迎です。

4

1 に答える 1

4

デバッガーに接続して実行していることが問題の原因であることがわかりました。デバッガーの外で実行すると、1 バイトを読み取るために記録された最大時間は約 20 ミリ秒でしたが、内部で実行した場合 (ブレークポイントなし、条件付き、またはその他の有効化) は最大 700 ミリ秒でした。

リリース ビルドを実行するときの通信の問題の本当の原因はおそらく別の場所にあるため、ちょっとしたニシンです。

于 2012-10-23T14:09:57.687 に答える