gpt4 book ai didi

c# - 一点一点地加载表

转载 作者:太空宇宙 更新时间:2023-11-03 10:42:12 24 4
gpt4 key购买 nike

为了不通过将整个表放入其中而耗尽内存,我在其中执行了 LOAD_SIZE 记录 block 。这就是我的做法,我觉得有些索引偏离了一条记录?以及我可以做的可能的性能改进所以我想听听您对这种方法的看法。

        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();
}

最佳答案

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

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

此示例代码不是为了编译 -- 它是作为示例给出的

// insert list
List<EmpsSummary> insertList;
// add stuff to insertList

List<EmpsSummary> filteredList = insertList.Except(this.Context.Employees);

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

您还需要能够比较 EmpsSummary。为此,请像这样创建此 IEquitable:

此示例代码不是为了编译 -- 它是作为示例给出的

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;
}
}

关于c# - 一点一点地加载表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24935412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com