![](/img/trans.png)
[英]How Can I optimize my FTP Download using foreach() and ftpwebrequest?
[英]how can I Optimize this foreach
public int SetNumber(FinancialEntities db, bool Redirected = false)
{
db = new FinancialEntities();
List<Document> ds = db.Documents.Where(d => DbFunctions.TruncateTime(d.Date) > DbFunctions.TruncateTime(Date) && d.UnitID == UnitID).ToList();
ds.Remove(this);
ds = ds.OrderBy(d => d.Date).ToList();
if (ds.Count > 0)
{
Number = ds.FirstOrDefault().Number;
int tn = (int)Number;
foreach (var item in ds)
{
tn++;
if (item.Number != tn)
{
item.Number = tn;
db.Entry(item).State = System.Data.Entity.EntityState.Modified;
}
}
db.SaveChanges();
}
else
{
Number = db.Documents.Where(d => d.UnitID == UnitID).Count() > 0 ? db.Documents.Where(d => d.UnitID == UnitID).Max(d => d.Number) + 1 : 1;
}
List<int?> nums = db.Documents.Where(d => d.UnitID == UnitID).Select(d => d.Number).ToList();
int nc = nums.Count();
int ndc = nums.Distinct().Count();
if (nums.Distinct().Count() != nums.Count() && Redirected == false)
{
if (ds.Count() == 0)
ds = db.Documents.Where(d => d.UnitID == UnitID).ToList();
ds.First().SetNumber(db, true);
}
return (int)Number;
}
这是一种将数字放在日期开头并修复该日期之后条目的 rest 的方法。 遍历条目需要很长时间,并导致很多问题。 我该如何优化呢?
您可以尝试从 DB 中删除大量读取并在 memory 中执行所有操作。
像这样的东西:
public int SetNumber(FinancialEntities db, bool Redirected = false)
{
db = new FinancialEntities();
var docs = db.Documents.Where(d => d.UnitID == UnitID).ToList();
var ds = docs.Where(d => d.Date > Date).ToList();
ds.Remove(this);
ds = ds.OrderBy(d => d.Date).ToList();
if (ds.Count > 0)
{
Number = ds.FirstOrDefault().Number;
int tn = (int)Number;
foreach (var item in ds)
{
tn++;
if (item.Number != tn)
{
item.Number = tn;
db.Entry(item).State = System.Data.Entity.EntityState.Modified;
}
}
db.SaveChanges();
}
else
{
Number = docs.Count > 0 ? docs.Max(d => d.Number) + 1 : 1;
}
List<int?> nums = docs.Select(d => d.Number).ToList();
int nc = nums.Count;
int ndc = nums.Distinct().Count();
if (ndc != nc && Redirected == false)
{
if (ds.Count == 0)
ds = docs.ToList();
ds.First().SetNumber(db, true);
}
return (int)Number;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.