不同背景下不寻常的长执行时间

时间:2015-05-28 08:20:07

标签: c# nhibernate fluent-nhibernate

我的代码存在异常问题。

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

private RCLinks GetStructureCore(RC rc)
    {
        var model = new RCLinks(rc);
        using (var unit = UnitOfWork.Create(_dbsession))
        {
            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);
                }).ToList();
           model.InternalStructure = internal_structure;
           Log.Debug("End GS " + rc.Id);
        }
        return model;
    }

当我从UI线程调用此函数时,它执行30-35秒, 但是当我从UnitTest调用它时,执行时间为1-2秒!

在代码的一部分下面,我如何从UI线程和UnitTest调用函数

      DateTime begin = DateTime.Now;
      var model = GetStructureCore(rc);
      DateTime end = DateTime.Now;
      Log.Debug("ExecTime= "+(end-begin).ToString(@"mm\:ss"));

为什么?我可以在UI中修复执行时间吗?

PS

Sory,我没有正确地提问。仅在调试模式下的慢速时间。无调试(Ctrl + F5)模式执行时间与测试时间相同。 我按照NHibernate: Criteria query slow in web app but fast in unit tests, why?Slow debugging issue in Visual Studio的说明进行了操作,但调试时间相同。

谢谢!

1 个答案:

答案 0 :(得分:0)

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

\setupTABLE

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