You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:将收据保存至静态类,保存时从静态类获取——依赖静态类,易引发内存泄漏或状态混乱

求助需求

  1. 无需修改「在ExpenseEdit页面单独保存Expense」的逻辑,求更优的内存优化方案
  2. 分析当前对象传递逻辑的不合理之处

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:45:19