【问题标题】:Populate Dataset tables when accessed访问时填充数据集表
【发布时间】:2019-02-19 19:21:19
【问题描述】:

我有一个 C# 数据集,该数据集在应用程序启动时从包含大量数据的数据库中加载。 这会减慢应用程序的启动速度。 我想将数据集表留空并在第一次访问表时从数据库中填充它们一次,因此任何表在第一次访问之前都保持为空。

最好的方法是什么?

【问题讨论】:

  • 为什么不在ThreadBackground Worker做呢?
  • 我们在其他场景中尝试过,但它有问题。
  • When the table is accessed for the first time - 这是什么意思?

标签: c# database winforms performance dataset


【解决方案1】:

您正在尝试做的事情称为Lazy Loading

最简单的方法是在你的服务层做这样的事情:

public class EmployeeManager : IEmployeeManager
{
    private readonly IEmployeeRepository _employeeRepository;

    private IEnumerable<Employee> _employees;

    public EmployeeManager(IEmployeeRepository employeeRepository)
    {
        _employeeRepository = employeeRepository;
    }

    public IEnumerable<Employee> GetEmployees()
    {
        return
            _employees ?? (_employees = _employeeRepository.GetAll());
    }
}

请注意,_employees 集合仅在第一次调用方法 GetEmployees() 时才会填充。因此,假设您将数据访问代码分隔在不同的层中,您可以将这个逻辑放在那里,并且只有在需要时才会填充数据。

解决此问题的另一种方法是实现分页,以便您仅以块的形式获取所需的数据,而不是将整个表加载到内存中,以下是有关此的更多信息:

http://www.codeproject.com/KB/database/PagingResults.aspx

【讨论】:

  • 如果我从 beginnig 构建类,这没问题,但这里的问题是数据集表的强类型类是自动生成的。
猜你喜欢
  • 2015-02-08
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 2020-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多