Slow refresh rate of 512 NeoPixels

Hey all,
I have an arduino Mega running this code. It’s just 512 pixels and they’re not all on.
I’m running into low frame rate when I have longer strings.
Does anyone know why this is?

Only the longer strings slow down the fps.

Thanks!

#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>

#include "FORCED_SQUARE5pt7b.h"
// DATA PIN
// If you want to use a different data pin on your microcontroller CHANGE THIS!
#define DATA_PIN 6

#define arr_len( x )  ( sizeof( x ) / sizeof( *x ) )

// Matrix setup params
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix( 32, 8, 2, 1, 6,  NEO_MATRIX_BOTTOM     + NEO_MATRIX_RIGHT +
  NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
  NEO_GRB            + NEO_KHZ800);


// Edit this
// The important stuff, your message and colors

char* Text[]= {
"while expectations >= achievements {",
"/  /  /  /  /  /",
"happiness -= currentMood('emotion');", 
"#  #  #  #  #  #",
"depression = true;",
"if lonely {",
"stranger = instance_nearest(x,y,human);",
"if stranger.single {",
"fillMyVoid(stranger);}}",
"else {"
"if drugInventory > 0 {",
"var q = random_range(1,currentTolerance);",
"use(drugs[random(drugXP)],q);"
"}",
"else { ",
"playAudio('black waves.mp3');"
"cry = true;",
};
const uint16_t colors[] = {
matrix.Color(59, 163, 255), matrix.Color(255, 110, 233),matrix.Color(215, 67, 255), matrix.Color(95, 255, 43), matrix.Color(31, 255, 185)};

const uint16_t bcolors[] = {
matrix.Color(2, 43, 45), matrix.Color(23, 213, 233),matrix.Color(124, 174, 234), matrix.Color(95, 255, 43), matrix.Color(31, 255, 185)};

  //matrix.Color(0, 255, 0)};


int brightness = 50;
// End Edit

int numMode = arr_len(Text)-1;
int numColor = arr_len(colors)-1;
int numColorb = arr_len(bcolors)-1;
int pixelPerChar = 4;
int maxDisplacement;
int mode = 0;
int delayTime = 0;


void setup() { 
  matrix.begin();
  matrix.setTextWrap(false);
  matrix.setBrightness(brightness);
  matrix.setTextColor(colors[0]);
matrix.setFont(&FORCED_SQUARE5pt7b);

}

int y = matrix.height();
int x = matrix.width();
int pass = 0;
int passb = 2;
int line_pass = 0;

void loop() {
   // matrix.setBrightness(random(150));
  // if mode greater than numMode reset
  if (mode > numMode) { mode = 0; }
    //matrix.fillScreen(matrix.Color(0,0,255));
  //matrix.fillScreen(0);

  matrix.fillScreen(0);
 
  //matrix.setPixelColor(random(512),255,110,233);
  matrix.setCursor(x, 5);
  scroll(Text[mode],delayTime);
}

// this does the magic of scrolling
void scroll(char* message,int delays) {
  maxDisplacement = strlen(message) * pixelPerChar + matrix.width() + 10;
  if(++line_pass > matrix.width()) line_pass = 0;
   matrix.setTextColor(colors[pass]);
   
  matrix.print(String(message));
  matrix.setTextColor(bcolors[passb]);
  matrix.setCursor(x, 6);
  
  
  matrix.print(String(message));
   matrix.setTextColor(bcolors[passb + 1]);
  matrix.setCursor(x, 6);
  
  
  matrix.print(String(message));
 
  //matrix.show();
  if(--x < -maxDisplacement) {
    x = matrix.width();
    if(++pass >= numColor) { pass = 0;  };
    matrix.setTextColor(colors[pass]);
    mode++;
  }
  matrix.show();
  //delay(delays);
}