Backup: сократить копирование буферов импорта и экспорта без смены формата
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
调研方向
Start with SettingsViewModel.OpenBackup and BackupArchive.Decrypt, then trace the export serialization and existing tests related to #334. Check the current archive format, size limits, authentication behavior, and storage handling before changing buffer ownership. Done means preserving v1 compatibility and safe export guarantees, passing the specified boundary and failure tests, and confirming lower allocations with a repeatable isolated benchmark.
由索引模型根据 Issue 内容生成。
描述
Проблема
SettingsViewModel.OpenBackup загружает файл в растущий MemoryStream, затем делает ToArray(). BackupArchive.Decrypt дополнительно выделяет plaintext размером с payload. Экспорт сначала создаёт полный JSON-массив, затем отдельный массив результата. Лимит экспорта проверяется только после полной сериализации.
Измерения
Windows x64, .NET 10.0.7 Release, без tiered compilation; два прогрева, медиана семи повторов. Синтетический набор: 200 профилей с отдельными конфигурациями по 128 КиБ, JSON около 25,1 МиБ.
- Чтение в памяти + текущая расшифровка: 100,58 мс, 164,58 МиБ аллокаций.
- C#-прототип с заранее выделенным буфером, без
ToArray()и с расшифровкой на месте: 83,93 мс, 75,47 МиБ. - Текущий экспорт: 83,58 мс, 113,78 МиБ.
- Сериализация в поток с последующим шифрованием на месте: 83,41 мс, 65,84 МиБ.
- Отказ текущего экспорта для набора с примерно 38 МиБ исходных конфигураций всё равно выделяет около 165 МиБ.
Аллокации суммарные, не пик RAM. Реальный диск, Avalonia storage providers, получение секретов и полное восстановление не измерялись. Прототипы совместимы с текущим форматом; выигрыш по времени для небольших наборов не установлен.
Решение
Оптимизировать буферы в C#, сохранив формат v1, лимит 32 МиБ, AES-GCM, PBKDF2, AAD и обработку ошибок. При достоверно известной длине заранее выделять буфер после проверки лимита; для потока неизвестной длины использовать ограниченное накопление. Исключить ToArray() перед расшифровкой, рассмотреть шифрование/расшифровку на месте в буфере с эксклюзивным владением. Ограничивать сериализацию в процессе записи, до неограниченного роста результата.
Готово, когда
- Старые архивы читаются, новые читаются прежней реализацией; заголовок, версии и криптографические параметры совместимы.
- Тесты проверяют неверный пароль, повреждение, усечение, точную границу размера и превышение лимита для потоков с известной и неизвестной длиной.
- Plaintext не выдаётся вызывающему коду до успешной аутентификации и не пишется во временные файлы; принадлежащие компоненту временные секретные буферы очищаются на ошибках.
- Сохраняются гарантии безопасного экспорта, исправленные в #334; особенности
IStorageFileне обходятся предположением о локальном пути. - Повторяемый изолированный бенчмарк подтверждает снижение аллокаций; измерения отделены от пика RAM и дискового I/O.
Связано с #18 и #334. Смена языка, новый блочный формат, сжатие и ослабление KDF не входят в задачу. Все проверки — BYDLO_SAFE_DEV=1, фейки, без движков и изменения сети.
- 主要语言
- C#
- 星标
- 5
- 派生
- 1
- 平均合并
- 46 分钟
- 30 天内合并 PR
- 179
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
endercodezz/BYDLO 的其他 Issue
-
bug P1
难度 2/5 1-3 小时 新手友好度 76/100
endercodezz/BYDLO#417 ·
维护者通常 1 天内回复
-
dependencies go P3
难度 5/5 一周以上 新手友好度 20/100
endercodezz/BYDLO#430 ·
维护者通常 1 天内回复
-
dependencies P3
难度 4/5 3-5 天 新手友好度 48/100
endercodezz/BYDLO#429 ·
维护者通常 1 天内回复
-
dependencies github_actions P3
难度 4/5 3-5 天 新手友好度 55/100
endercodezz/BYDLO#428 ·
维护者通常 1 天内回复
-
dependencies github_actions good first issue P3
难度 3/5 1-2 天 新手友好度 52/100
endercodezz/BYDLO#427 ·
维护者通常 1 天内回复
查看 endercodezz/BYDLO 的全部 Issue
相似的 Issue
-
Incorrect loop bound in SizeOptIListSelectIterator.ToList可能已有人在做 @equmagg 今天认领。 未关闭area-System.Collections untriaged
难度 2/5 1-3 小时 新手友好度 64/100
dotnet/runtime#137126 · 1 条评论 ·
维护者通常 1 天内回复
-
needs-triage
难度 1/5 1-3 小时 新手友好度 76/100
Azure/azure-sdk-for-net#64658 · 1 条评论 · 1 个 reaction ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
dotnet/aspnetcore#70370 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 82/100
NethermindEth/nethermind#15684 ·
维护者通常 1 天内回复
-
area/ai-assistant squad/flyt
难度 2/5 1-3 小时 新手友好度 83/100
Altinn/altinn-studio#21798 ·
维护者通常 1 天内回复