Проблема в том, что вы тратите много времени ЦП в методе рисования каждый кадр. Метод Draw вашего экземпляра Game всегда будет вызываться как можно чаще, будь то в фиксированное время или нет. Учитывая это, вы всегда хотите быть уверены, что проводите там как можно меньше времени, а это значит, что вы хотите перенести большую часть работы на графический процессор.
Вложенные циклы for, а также все вызовы spriteBatch.Draw
будут использовать гораздо более медленный процессор, особенно когда ваш цикл становится все больше и больше, что означает задержку рисования.
Если вы хотите выполнять расчеты для каждого пикселя, для каждого рисунка, для каждого кадра, то лучший способ сделать это - поместить работу на графический процессор и использовать пиксельный шейдер. Вы можете решить собственную проблему, создав одну текстуру нужного размера и передав массив в шейдер, содержащий вашу информацию о включении или выключении, среди других способов достижения той же цели.
Как: применить пиксельный шейдер к спрайтам