немного отвлечься; Вы также разрешаете пользователю сохранять вручную? Я считаю, что это важно для вопроса, так как он должен помочь определить, насколько жестким должно быть поведение при автосохранении.
Другое соображение; разрешены частичные коммиты? Если пользователь изменяет одну часть информации, включается автосохранение, пользователь изменяет другую часть, и затем приложение вылетает. Возможно ли, что автоматическое сохранение может привести к повреждению данных из-за того, что оно сохранило то, что должно было быть атомарной операцией, которая не была полностью завершена?
Теперь, поскольку вы упоминаете, что база данных является локальной, вам не нужно слишком беспокоиться о задержке клиент-серверной базы данных. Это означает, что высокая частота коммитов должна быть хорошей. Поэтому я бы полностью исключил вариант 2. Экономия один раз на выходе кажется слишком рискованной.
Мне нравится идея реагировать на изменения свойств и сохранять тогда, но только если рассмотрение частичной фиксации выше не будет проблемой. Это обеспечит своевременную передачу всех данных.
Если у пользователя есть способ вручную сохранить свои данные, я бы, вероятно, выбрал временный подход. Установите для него значение 10 секунд (или какое-либо значение) и отключите автосохранение, при этом пользователю отобразится уведомление о срабатывании автосохранения.
Главное, о чем я должен беспокоиться, - это то, чего ожидает пользователь. Если вы фиксируете каждое изменение, пользователь (вероятно) не будет удивлен состоянием своих данных в случае сбоя. То же самое относится и к уведомлению об автоматическом сохранении. Информирование пользователя об интервалах сохранения позволит ему не обращать внимания на сбой, имея уверенность в том, что состояние их данных все еще будет относительно свежим.