То, с чем вы сталкиваетесь, кажется мне ограничением ресурсов, так что это то, что касается вашего пользовательского интерфейса / дизайна приложения.Нет никаких хитростей, чтобы получить больше памяти, более быстрый доступ к «диску» и т. Д.
Я бы использовал гибридный подход, используя меметон в кольцевом буфере и обрабатывая каждый фильтр в следующем свободном предварительно выделенном слоте.Это даст вам ограниченный быстрый откат / повтор без повреждения кучи.Для неограниченных шагов отмены / повтора у вас есть журнал команд.Если вам действительно нужно 400 шагов отмены, вы также можете сохранить, как каждые 10 операций, снимок с командами и сжать 10 из этих снимков в больший снимок.
Самое важное - дать пользователю понять, что он работает на границах устройства, как предупреждающий знак, когда ваша быстрая отмена исчерпана.
Также может быть полезно подготовить буфер быстрой отмены / повтора в фоновом режиме, поэтому, когда пользователь отменяет 2 раза, вы уже готовите третью отмену.В большинстве случаев пользователь просматривает изображение в течение нескольких мс (около 200–400), прежде чем он выполнит следующую отмену.
Также вы можете реализовать различные стратегии отмены / возврата для обратимых операций, использующих минимальное количество памяти.Алгоритм быстрого сжатия без потерь (lzma и т. Д.) В фоновом режиме может еще больше снизить потребление памяти.
Но так как это кажется ограничением ресурсов (IO по сравнению с памятью и CPU), все ваши варианты:жить с этим и попытаться сделать пользовательский опыт как можно лучше.И это иногда становится трудной задачей.