MAUI应用页面间传参携带大对象导致应用卡顿求助
MAUI费用报表应用内存优化问题
应用结构与操作流程
- 着陆页展示会计对象列表,核心对象为费用报表(ExpenseReport)
- 对象层级:
ExpenseReport包含1N个`Expense`,每个`Expense`包含1N个Receipt;Receipt核心字段为ID、Image(blob)、Thumbnail Image(blob) - 导航逻辑:
- 着陆页选中
ExpenseReport后,跳转至ExpenseReportEdit页面,传递原对象及深拷贝ExpenseReportOriginal(用于字段对比) - 在
ExpenseReportEdit选中Expense后,跳转至ExpenseEdit页面,传递ExpenseReport、ExpenseReportOriginal、Expense、ExpenseOriginal四个对象
- 着陆页选中
- 编辑逻辑:在
ExpenseEdit通过ScanReceipt()(标记[RelayCommand])拍摄收据,生成Receipt添加至Expense.Receipts;所有编辑暂存内存,最终点击SaveExpenseReport一次性将整个对象树保存至SQLite;Original对象用于对比变更,控制保存按钮状态及未保存提示
当前痛点
每张收据照片约7MB,添加6张后Expense.Receipts会持有6个大对象,且每次拍照后OnAppearing()触发时应用明显卡顿;核心问题是内存中持续携带包含大字节数组的完整对象树,导致内存占用过高
现有方案的不足
希望将Expense模型中的public List<Receipt> Receipts { get; set; }替换为public List<int> ReceiptIDs { get; set; },但现有两种方案均不理想:
- 方案a:将收据暂存至数据库,仅传递ID,取消保存时删除暂存记录——实现不够优雅
- 方案b:将收据保存至静态类,保存时从静态类获取——依赖静态类,易引发内存泄漏或状态混乱
求助需求
- 无需修改「在ExpenseEdit页面单独保存Expense」的逻辑,求更优的内存优化方案
- 分析当前对象传递逻辑的不合理之处
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

