以块的形式一点一点地加载Table

本文关键字:一点 加载 Table | 更新日期: 2023-09-27 18:14:30

为了不耗尽内存,我在其中做了LOAD_SIZE记录块。我是这样做的,我觉得有些索引偏离了一条记录?以及我可以做的性能改进所以我想听听你对这个方法的意见。

        int totalCount = repo.Context.Employees.Count();
        int startRow = 0;
        while (startRow <= totalCount)
        {
            repo.PaginateEmployees(startRow, LOAD_SIZE);
            startRow = startRow + LOAD_SIZE ;
        }
    public List<EmpsSummary> PaginateEmployees(int startRow, int loadSize)
    {
        var query = (from p in this.Context.Employees
                     .Skip(startRow).Take(loadSize)
            select new EmpsSummary
            {
                FirstName =  p.FirstName,
                LastName =  p.LastName,
                Phone = p.Phone
            });
        return query.ToList();
    }

以块的形式一点一点地加载Table

由于Linq的工作方式(延迟加载和比较),如果您正确地制定语句,它将比您能够更好地管理内存。

根据您的评论(应该添加到问题中),我提供了这个解决方案,它应该可以很好地为您管理内存。

这个示例代码不是用来编译的——它是作为一个示例

// insert list
List<EmpsSummary> insertList; 
// add stuff to insertList
List<EmpsSummary> filteredList = insertList.Except(this.Context.Employees);

假设this.Context.Employees的类型为EmpsSummary。如果不是,则必须将其强制转换为正确的类型。

您还需要能够比较EmpsSummary。要这样做,创建这个公平,像这样:

这个示例代码不是用来编译的——它是作为一个示例

public class EmpsSummary : IEquatable<EmpsSummary>
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Phone { get; set; }
    public bool Equals(EmpsSummary other)
    {
        //Check whether the compared object is null.
        if (Object.ReferenceEquals(other, null)) return false;
        //Check whether the compared object references the same data.
        if (Object.ReferenceEquals(this, other)) return true;
        //Check whether the products' properties are equal.
        return FirstName.Equals(other.FirstName) &&
               LastName.Equals(other.LastName) &&
               Phone.Equals(other.Phone);
    }

    // If Equals() returns true for a pair of objects 
    // then GetHashCode() must return the same value for these objects.
    public override int GetHashCode()
    {
        int hashProductFirstName  = FirstName == null ? 0 : FirstName.GetHashCode();
        int hashProductLastName = LastName == null ? 0 : LastName.GetHashCode();
        int hashProductPhone = Phone == null ? 0 : Phone.GetHashCode();
        //Calculate the hash code 
        return hashProductFirstName  ^ hashProductLastName  ^ hashProductPhone;
    }
}