0

コードにいくつかのブレーク ポイントを追加して、到達したときに 2 つの変数の値を監視します。アプリケーションは基本的に、500 Hz で動作するマイクロ コントローラによって生成されたシリアル ポートから 9600 ボーでデータ ストリームを受信し、特定のルール「if」および「if else」に従ってメッセージをフィルタリングして、ヘッダー文字を取り除き、それらをアドレス指定する必要があります。計算用のその他の変数。コードは次のとおりです。

 class Stripper
{
 public  void  Distri (string inComing, out string param1, out string param2, out string param3, out string param4)
    {
        string currentRes="";
        string currentMot = "";
        string temperature="";
        string numRPM="";
        string f = inComing;
        if (inComing.Length < 6)
        {
            f = ">123456<";
        }
        char firstChar = f[0];
        char lastChar = f[f.Length - 2];
        bool test1 =(firstChar.Equals('>'));
        bool test2 =(lastChar.Equals('<'));
        int messLenght = f.Length;

        try
        {
            if (test1 == true && test2 == true && messLenght <= 10)
            {
                f = f.Replace("<", "");
                f = f.Replace(">", "");

                if (f[0] == 'I')
                {
                    string _currentRes = f;
                    _currentRes = _currentRes.Replace("I", "");
                    currentRes = _currentRes;
                }

                else if (f[0] == 'M')
                {
                    string _currentMot = f;
                    _currentMot = _currentMot.Replace("M", "");
                    currentMot = _currentMot;
                }

                else if (f[0] == 'T')
                {
                    string _temperature = f;
                    _temperature = _temperature.Replace("T", "");
                    temperature = _temperature;
                }
                else if (f[0] == 'N')
                {
                    string _numRPM = f;
                    _numRPM = _numRPM.Replace("N", "");
                    numRPM = _numRPM;
                }

                else
                { }
            }

            else
            { }
        }
        catch (System.Exception)
        {

            throw;
        }

        param1 = currentRes;
        param2 = temperature;
        param3 = numRPM;
        param4 = currentMot;

        }
       }
      }

私が直面している問題は非常に奇妙で、ある時点で完全に道に迷ってしまいました。基本的に、変数「f」と「inComing」でブレークポイントがアクティブになっていると、アプリはすぐに応答しなくなり、それを機能させるには、ストリームの速度をシリアルから 1/100 に落として遅延を発生させる必要がありました。ブレーク ポイントがなければ、アプリはデータの完全なストリームを問題なく取得できます。この経験は、同じような状況にある他の人にも役立つかもしれません。ブレークポイントがプロセスをかなり劇的に遅くしているように見えます.16 Gb RAMと2.4 Ghzプロセッサi5を搭載したモンスターである私が使用しているPCとは関係がないと思います. なぜこれが起こっているのか、ブレークポイントを使用しないのではなく、そのような問題を回避する方法があるのだろうか?

4

1 に答える 1