C# 需要运行迁移控制台应用程序:记录杀死过程太多-不知道如何解决
我已经编写了一些代码来为一个全面的事务处理数据。然而,我正遭受着无尽的问题和死胡同。如果我在一个小数据集上运行我的代码,它将按预期工作。但是现在我已经将生产环境恢复到测试数据库中,以获得完整的测试范围。我基本上是在浪费时间C# 需要运行迁移控制台应用程序:记录杀死过程太多-不知道如何解决,c#,sql,nhibernate,transactions,unit-of-work,C#,Sql,Nhibernate,Transactions,Unit Of Work,我已经编写了一些代码来为一个全面的事务处理数据。然而,我正遭受着无尽的问题和死胡同。如果我在一个小数据集上运行我的代码,它将按预期工作。但是现在我已经将生产环境恢复到测试数据库中,以获得完整的测试范围。我基本上是在浪费时间 private static void AddProvisionsForEachSupplement2(ISupplementCoordinator supplmentCord) { var time = DateTime.Now;
private static void AddProvisionsForEachSupplement2(ISupplementCoordinator supplmentCord)
{
var time = DateTime.Now;
using (var scope = new UnitOfWorkScope())
{
var supplements = supplmentCord.GetContracts(x => x.EffectiveDate <= new DateTime(2014, 2, 27)).AsEnumerable();
foreach (var supplement in supplements){
var specialProvisionTable = supplement.TrackedTables.FirstOrDefault(x => x.Name == "SpecialProvisions");
SetDefaultSpecialProvisions(specialProvisionTable, supplement);
Console.Out.WriteLine(supplement.Id.ToString() + ": " + (DateTime.Now - time).TotalSeconds);
}
}
}
在获得事务超时之前,我添加了[Transaction(Timeout=6000)]以获得该信息。我们需要更多信息,给您一个明确的答案将非常困难。然而,当在一个大型事务中处理大型数据集时,总是会影响性能 然而,坦白说,我要做的第一件事就是连接一个SQL分析器(比如,或SQL分析器,甚至)来查看您发出了多少查询。然后,当您进行测试时,您可以看到是否可以减少查询,从而减少时间 在解决了这个问题后,您有几个选择:-
祝你好运:)谢谢里波,我想说得简洁一些。我将添加更多信息,不过我会将其作为中等范围的6位数查询。如果不重写“dev complete”(开发完成)项目的整个后端,我真的无法将其缩减,这是为了追溯数据库更新。这需要一篇硕士论文来证明这个项目中有多少垃圾,所以我希望指出WAAAY太大和事务超时会导致相同的答案,如果是100k查询或600k查询。
The transaction associated with the current connection has completed but has not been disposed. The transaction must be disposed before the connection can be used to execute SQL statements.