Задача приложения такова: необходимо считать бинарный файл и отобразить его содержимое в виде таблицы битов. Каждая ячейка этой таблицы должна показывать значение бита и может иметь разный фон (всего 16 цветов). Вся таблица должна zoom'иться и scroll'иться.
Реализую следующим образом: в XAML имеется контейнер ScrollViewer и в нем динамически создаю UniformGrid (либо просто Grid). Так же динамически создаю Rectangle для каждой ячейки (благодаря чему реализую border и background для каждой ячейки). Zoom делаю с помощью ScaleTransform.
Есть 2 вопроса..
1-ый и самый главный. Если читать файл килобайт этак 20, то создается 20 тысяч объектов Rectangle. Этот процесс занимает на моем (не самом слабом компьютере) до нескольких минут. Приложение съедает примерно 350 мб оперативы. Но как только все объекты созданы, приложение отрисовывается и работает без единого тормоза, даже при скролле и зуме таблицы.
Учитывая, что у rectangle'ов может быть всего 16 цветов фона. Я думал, используя только 16 объектов, заполнить Grid, но насколько я понял это невозможно
Подскажите пожалуйста, как можно оптимизировать приложение, естественно не отказываясь от WPF?
2-ой. затрудняюсь придумать, как отображать "1" или "0" в моих ячейках-rectangle'ах?