C#面试题更新 2026-08-05

请解释延迟加载的概念,并说明在 C# 编程语言中可以采用哪些具体方式来实现延迟加载机制?

技术原理技术选型C#

考察说明

考查对延迟加载概念的理解以及 C# 中实现延迟加载的常见技术手段。

回答思路

  1. 【回答框架 1】延迟加载是一种设计模式,指对象的创建或数据的获取被推迟到首次实际访问时才执行,从而避免不必要的资源消耗和初始化开销。
  2. 【回答框架 2】在 C# 中,可通过 Lazy<T> 类实现,其默认使用 LazyThreadSafetyMode.ExecutionAndPublication 保证线程安全,支持委托传入初始化逻辑,首次访问 Value 属性时执行。
  3. 【回答框架 3】也可通过属性中的 null 检查手动实现,例如在 getter 中判断字段是否为空,为空则创建实例,但需注意线程安全问题,可用 lock 或 volatile 修饰字段。
  4. 【回答框架 4】对于数据库或大型数据集合,可使用 EF Core 的导航属性配置延迟加载,需要安装 Microsoft.EntityFrameworkCore.Proxies 包并启用 UseLazyLoadingProxies,但可能带来 N+1 查询问题。
  5. 【回答框架 5】选择实现方式需权衡场景:Lazy<T> 适合简单且线程安全的场景,手动实现适合需要控制锁逻辑,框架自带功能适合 ORM 场景,但都需考虑性能与内存。
  6. 【关键点 1】Lazy<T> 是 C# 中内置的延迟加载实现,支持线程安全模式。
  7. 【关键点 2】手动实现延迟加载需在属性 getter 中检查并创建实例,注意加锁。
  8. 【关键点 3】EF Core 的延迟加载通过代理类实现,但可能引发额外查询。
  9. 【易错点 1】Lazy<T> 的默认模式为线程安全,但若使用 LazyThreadSafetyMode.None 在并发下可能重复初始化。
  10. 【易错点 2】延迟加载可能导致性能问题,如数据库 N+1 查询,需评估使用时机。
  11. 【易错点 3】必须依赖字段与属性,若直接访问字段则无法触发延迟加载逻辑。