Arduino Mega 2560 Serial Input Cycle Problem

I changed the test sketch a little, to show you a different way of producing the same output.
The sketch times the for loop, and changes the way to operate when a 'x' is received.

#include <Wire.h>
#include <NewPing.h>
#define SONAR_NUM 3   // Number of Sonar

uint8_t i;
char inbyte;          // command byte received from Rpi (Serial 1)
String sid;           // String of Ultrasonic sensor id
String dist;          // String of distance value
String outpackage;    // String sent to rpi via Serial 1
String irsensor;      // String of ir sensor id
String irstate;       // ir sensor state

unsigned int distance;

void setup() {
  Serial.begin(115200);
}

bool noString = true;

void loop() {
  if (Serial.available() > 0) {
    inbyte = Serial.read();
    if (inbyte == 'C') {
      uint32_t start = micros();
      for (i = 0; i < SONAR_NUM; i++) {
        distance = random(0, 400);
        if (noString) {
          Serial.write('u');
          Serial.print(i + 1);
          Serial.write(' ');
          Serial.println(distance);
        } else {
          sid = String(i + 1);
          dist = String(distance);
          outpackage = "u" + sid + " " + dist + "\n";
          Serial.print(outpackage);
        }
      }
      uint32_t dur = micros() - start;
      Serial.print("E ");
      Serial.print(dur);
      Serial.println(" us");
    } else if (inbyte == 'x') {
      noString = !noString;
    } else if (inbyte != ' ') {
      Serial.write(inbyte);
    }
  }
}

I changed the processing sketch to send 'Cx' so each 'scan' switches the method.

import processing.serial.*;
Serial port;

String inString = "nothing";

void setup() {
  size(400, 400);
  noStroke();
  background(200);
  printArray(Serial.list());
  port = new Serial(this, "COM28", 115200);
  port.bufferUntil('\n');
  delay(2000);
}
int lastSend;
byte msg[] = { 'C', 'x' };

void draw() {
  if (millis()-lastSend >= 100) {
    lastSend = millis();
    port.write(msg);
  }
}
void serialEvent(Serial p) {
  inString = trim(p.readString());
  println(inString);
}

And part its output

u1 244
u2 158
u3 96
E 1004 us
u1 371
u2 264
u3 360
E 1476 us
u1 198
u2 351
u3 340
E 1060 us
u1 103
u2 351
u3 1
E 1436 us
u1 5
u2 280
u3 18
E 916 us
u1 74
u2 49
u3 13
E 1376 us
u1 120
u2 225
u3 12
E 1004 us

Using Strings cost you about 400 us per scan, which makes it 40% slower.
I think the non String code is a lot cleaner and does not need any additional variables.