Ход мысли
Пусть приложение "B" на первом кадре загрузит все данные, а потом "читает только изменения"
Это не годится - и не только потому что число данных может меняться от кадра к кадру. Никто не обещал что данные константны для "B" - оно будет их активно менять. Отсюда вывод: "B" должно читать все данные заново на каждом кадре. Поэтому, если мы не хотим раздувать файл, надо дать "B" возможность сделать seek в файле и оттуда считать.
С точки зрения "B" (читающего) перед чтением каждой структуры сначала считывается "magic" число по которому однозначно определяется где данные в файле. Если надо - делаем seek туда, читаем и возвращаемся взад. Существующий код записи/чтения меняется мало. Не могу понять почему никто не предложил этот простой способ - ну может есть лучший?
Дальше по существу все сводится к оптимизации - как эффективно кешировать и уменьшить число seek'ов которые изрядно тормозят чтение. Просто QCache здесь ничего не дает