Как уже упоминали другие, вы сначала хотите увидеть, если это проблема, прежде чем менять свой дизайн и т. Д. Если это проблема и / или вы имеете дело с большим количеством разреженных данных, то разреженная структура данных может быть более применимой для проблема. Я опубликую очень простую наивную реализацию позже (как я не могу в данный момент), но двумерная разреженная матрица будет делать то, что вы хотите.
Концепция заключается в том, что для заданного диапазона ячеек будет храниться один формат (либо строка, либо класс), например 1-1000. Чтобы извлечь из этого пользу, нужно внести некоторые изменения в дизайн ... Свойство format необходимо удалить из класса ячейки. Вместо этого формат должен быть зарегистрирован либо в классе таблицы, либо предпочтительно в другом классе. Например
public class CellFormats
{ ....
public void Register(int start, int finish, string format);
}
Класс форматов ячеек будет содержать разреженную матрицу, которая будет содержать формат для диапазона.
Класс Table будет затем использовать класс CellFormats. Вместо метода GetCellFormat у него будет метод со следующей сигнатурой
void ApplyCellFormat(Position cellPosition)
Это позволит получить формат ячейки из класса CellFormats (разреженная матрица) и применить его к ячейке.
Этот метод может значительно сократить использование памяти, если данные являются общими и применяются к большим диапазонам. Но, как я уже сказал, вы должны убедиться, что это является причиной проблемы, прежде чем делать ваш дизайн более сложным, добавив такой код.