slow sampling rate in 2 ble33 communication

hello
I am sending measurements between 2 BLE33 boards.
one of them is the central and the other one is peripheral.
for some reason I get only 50 Hz sampling rate for 1 byte of data, that seems to me very slow.
1)the peripheral sends the data pretty fast about 2 ms but the central read command takes about 25 ms, that makes sense?
2)Is that value makes sense?
3)If not, how can i increase the sampling rate?

Thanks alot

slave code:

#include <ArduinoBLE.h>

BLEService customService("1101");
BLEUnsignedIntCharacteristic valC("0101", BLERead );
BLEUnsignedIntCharacteristic tsC("0102", BLERead );
 bool shouldResetWDTOnConnection = true;
void setup() {
//  enableWDT();
//  resetWDT();
  Serial.begin(115200);
  //while (!Serial);
  delay(2000);
  pinMode(LED_BUILTIN, OUTPUT); // use the LED as an output
 //Serial.println("start advertising");

  // begin initialization
  if (!BLE.begin()) {
    Serial.println("starting BLE failed!");
    while (1);
  }
  // set the local name peripheral advertises
  BLE.setLocalName("per1");
    // add the characteristic to the service
  customService.addCharacteristic(valC);
  customService.addCharacteristic(tsC); 
  BLE.addService(customService);

  // add service
  
  // start advertising
  Serial.println("start advertising");
  BLE.advertise();

  Serial.println("Bluetooth device active, waiting for connections 1...");
//resetWDT();
}

void loop() {

BLEDevice central = BLE.central();
  if (central) {
    Serial.print("Connected to central: ");
    Serial.println(central.address());
    digitalWrite(LED_BUILTIN, HIGH);
    while (central.connected()) {
      uint16_t t0=millis();
      delay(2);      
     byte val=analogRead(A0);
     uint16_t ts=millis();
      valC.writeValue(val);
      //tsC.writeValue(ts);
      uint16_t te=millis();
      Serial.println(te-t0);
    }
    
}
else
     digitalWrite(LED_BUILTIN, LOW); 
}

master code:

#include <ArduinoBLE.h>
#include <String>
//config
bool zugi = LOW;
bool Debug = HIGH;
byte numSlaves = 0;
//functions
void connecting(String, int);
void initChar(BLEDevice & , const char* , const char* , BLECharacteristic &, BLECharacteristic &);
void sendData(BLECharacteristic, BLECharacteristic, bool, int);
void setup() {
  //setup serial
  Serial.begin(115200);
  //  setup ble
  BLE.begin();
  //BLE.debug(Serial);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);
}
void loop() {
  int periphCount = BLE.peripheralCount();
  BLEDevice p0 = BLE.peripheral(0);
  BLECharacteristic valC0 , tsC0;
  switch (numSlaves) {
    case 0:
      {
        if (periphCount < 1)
        {
          connecting("per1", 0);
          BLE.stopScan();
        }
        //define charachtiristics
        initChar( p0, "0101", "0102", valC0, tsC0);
        //while the slaves connected send data
        while (p0.connected() )
        {
          uint32_t t0 = millis();
          uint16_t ts, a;
          valC0.readValue(a);
          tsC0.readValue(ts);
          Serial.print( "dt is ");
          Serial.println(millis() - t0);
          digitalWrite(LED_BUILTIN, HIGH);
        }
        break;
      }
    case 1:
      {
        if (periphCount < 1)
        {
          connecting("per1", 0);
          BLE.stopScan();
        }
        //define charachtiristics
        initChar( p0, "0101", "0102", valC0, tsC0);
        //while the slaves connected send data
        while (p0.connected() )
        {
          uint32_t t0 = millis();
          sendData(tsC0, valC0, Debug, 0);
          Serial.print( "dt is ");
          Serial.println(millis() - t0);
          digitalWrite(LED_BUILTIN, HIGH);
        }
        break;
      }
    case 2:
      {
        if (periphCount < 2)
        {
          connecting("per1", 0);
          connecting("per2", 1);
          BLE.stopScan();
        }
        //define charachtiristics
        initChar( p0, "0101", "0102", valC0, tsC0);
        BLEDevice p1 = BLE.peripheral(1);
        BLECharacteristic valC1 , tsC1;
        initChar( p1, "1101", "1102", valC1, tsC1);
        //while the slaves connected send data
        while (p0.connected() && p1.connected())
        {
          uint32_t t0 = millis();
          sendData(tsC0, valC0, Debug, 0);
          sendData(tsC1, valC1, Debug, 1);
          Serial.println(BLE.peripheralCount());
          Serial.print( "dt is ");
          Serial.println(millis() - t0);
          digitalWrite(LED_BUILTIN, HIGH);
        }
        break;
      }
    
  }
  //connecting to the slaves

  digitalWrite(LED_BUILTIN, LOW);
}
void connecting(String namee, int num)
{

  //check if peripheral1 connected
  BLEDevice p0 = BLE.peripheral(num);
  //loop until peripheral1 is connected
  BLE.scanForName(namee);
  BLEDevice a0 = BLE.available();
  while (!a0.connected())
  {
    if (Debug)
      Serial.println("scaning...");
    while (!a0)
    {
      a0 = BLE.available();
    }

    if (a0.connect())
    {
      if (Debug)
      {
        Serial.print("conected");
        Serial.println(num + 1);
      }
    }
    else
    {
      if (Debug)
      {
        Serial.print("failed to connect");
        Serial.println(num + 1);
      }
    }
  }
}

void initChar(BLEDevice &p0, const char* Char1name, const char* Char2name, BLECharacteristic &valC0, BLECharacteristic &tsC0)
{
  p0.discoverAttributes();
  valC0 = p0.characteristic(Char1name);
  tsC0 = p0.characteristic(Char2name);
}
void sendData(BLECharacteristic tsC, BLECharacteristic valC, bool Debug, int num)
{
  uint16_t ts, a;
  valC.readValue(a);
  tsC.readValue(ts);
  if (Debug)
  {
    Serial .print(num);
    Serial.print("a is ");
    Serial.println(a);
    Serial .print(num);
    Serial.print("ts is ");
    Serial.println(ts);
  }
  else
  {
    Serial.write(a);
    Serial.write(a >> 8);
    Serial.write(ts);
    Serial.write(ts >> 8);
  }
}