具有int和长时间重载的性能损失

时间:2018-07-23 16:17:21

标签: c# .net performance entity-framework entity

问题:

当Entity中的直接数据访问需要0.4时,为什么将列表从受保护的内部类传递到API方法,然后再返回到UI却需要4秒钟?是由于通过这些方法实际传递了列表吗?

背景:

我希望创建一个“ API”层,该层位于使用实体框架的数据访问层和UI层之间。这个想法是限制对CRUD操作的访问,并通过API强制执行所有操作,但是我注意到性能很差。

在这里使用我的类结构时,这种情况下的get方法需要 4秒才能运行:

public class API
{
    DataAccessClass _dataAccess = new DataAccessClass();

    public List<Items> GetById(int id)
    {
        return _dataAccess.Get(id);
    }

    protected internal class DataAccessClass
    {
        protected internal List<Items> GET(int id)
        { 
            using (var context = dbcontext)
            {
                return context.GetItems();
            }
        }
        protected internal List<Items> GET(long id)
        { 
            using (var context = dbcontext)
            {
                return context.GetItems();
            }
        }
    }
}

但是,当我直接在代码中使用我的dbcontext(我想防止)时,它使用上面受保护的类中的相同代码在 .4秒中运行:

using (var context = dbcontext)
{
     return context.GetItems();
}

编辑:

当我排除API的数据访问部分(即受保护的内部部分),并直接在API中运行using语句(只是切除受保护的内部部分)时,我得到了可接受的.4秒。

1 个答案:

答案 0 :(得分:0)

为解决性能问题,我从上面的GET类中删除了重载。

我的性能问题来自最初的问题,该问题是通过更改两个get方法(一个采用int且一个采用long)的方法名称来解决的。不知道为什么这些重载会导致问题,但是通过删除重载并直接指定名称,我的性能问题得以解决。

我的工人阶级是这样的:

public class API
{
    DataAccessClass _dataAccess = new DataAccessClass();

    public List<Items> GetById(int id)
    {
        return _dataAccess.Get(id);
    }

    protected internal class DataAccessClass
    {
        protected internal List<Items> GetByInt(int id)
        { 
            using (var context = dbcontext)
            {
                return context.GetItems();
            }
        }
        protected internal List<Items> GetByLong(long id)
        { 
            using (var context = dbcontext)
            {
                return context.GetItems();
            }
        }
    }
}