C# 在不同的上下文中执行时间异常长

C# 在不同的上下文中执行时间异常长,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,我的代码有异常问题 我有一个从数据库中获取树的函数(使用递归算法) 为什么?我可以在UI中确定执行时间吗 附言 对不起,我问得不对。仅在调试模式下的慢速时间。在无调试(Ctrl+F5)模式下,执行时间与测试时间相同。 我按照说明进行了调试,但调试的时间同样巨大 谢谢 我可以在您的代码中看到一个基本流程,即每次执行递归时,都会在前一个工作单元中创建一个工作单元。这可能会导致在访问数据时锁定数据库表,我会将代码更改为 private RCLinks GetStructureCore(RC

我的代码有异常问题

我有一个从数据库中获取树的函数(使用递归算法)

为什么?我可以在UI中确定执行时间吗


附言 对不起,我问得不对。仅在调试模式下的慢速时间。在无调试(Ctrl+F5)模式下,执行时间与测试时间相同。 我按照说明进行了调试,但调试的时间同样巨大


谢谢

我可以在您的代码中看到一个基本流程,即每次执行递归时,都会在前一个工作单元中创建一个工作单元。这可能会导致在访问数据时锁定数据库表,我会将代码更改为

    private RCLinks GetStructureCore(RC rc, UnitOfWork uow)
    {
        var model = new RCLinks(rc);
        var rcRepo = unit.GetRepository<RC>();
            var rcLinkRepo = unit.GetRepository<RCLink>();
            List<RCLinks> internal_structure = rcLinkRepo.GetAllWhere(x => x.RC_ID == rc.Id).Select(x =>
                {
                    var tmp_rc = rcRepo.Get(x.ToRC_ID);
                    return GetStructureCore(tmp_rc,uow);
                }).ToList();
           model.InternalStructure = internal_structure;
           Log.Debug("End GS " + rc.Id);

        return model;
    }
private-RCLinks-GetStructureCore(RC-RC,UnitOfWork-uow)
{
var模型=新的RCLink(rc);
var rcRepo=unit.GetRepository();
var rcLinkRepo=unit.GetRepository();
列出internal_structure=rcLinkRepo.GetAllWhere(x=>x.RC_ID==RC.ID)。选择(x=>
{
var tmp_rc=rcRepo.Get(x.ToRC_ID);
返回GetStructureCore(tmp_rc,uow);
}).ToList();
model.InternalStructure=内部结构;
Log.Debug(“结束GS”+rc.Id);
收益模型;
}

因此,传递给该方法的工作单元以及在同一工作单元中完成的所有递归操作,

这里的任何人都不可能知道。您必须将其分解并测量其中的一部分,跟踪调用等,以找到花费时间的特定位置。我尝试测量每行代码在树中使用相同的DB和相同的实体。在UI上下文中,从数据库加载数据的时间要长得多。我很困惑。我找不到原因。NHibernate存储库支持延迟加载数据。但我在每个测试上下文中将我的树序列化为json字符串。结果没有改变。
      DateTime begin = DateTime.Now;
      var model = GetStructureCore(rc);
      DateTime end = DateTime.Now;
      Log.Debug("ExecTime= "+(end-begin).ToString(@"mm\:ss"));
    private RCLinks GetStructureCore(RC rc, UnitOfWork uow)
    {
        var model = new RCLinks(rc);
        var rcRepo = unit.GetRepository<RC>();
            var rcLinkRepo = unit.GetRepository<RCLink>();
            List<RCLinks> internal_structure = rcLinkRepo.GetAllWhere(x => x.RC_ID == rc.Id).Select(x =>
                {
                    var tmp_rc = rcRepo.Get(x.ToRC_ID);
                    return GetStructureCore(tmp_rc,uow);
                }).ToList();
           model.InternalStructure = internal_structure;
           Log.Debug("End GS " + rc.Id);

        return model;
    }