首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >较大型号的EF 6速度较慢问题

较大型号的EF 6速度较慢问题
EN

Stack Overflow用户
提问于 2019-01-09 21:18:08
回答 1查看 26关注 0票数 0

我正在使用EF 6和DB first方法,我面临着速度慢的问题。我的餐桌数超过了600桌。这方面的任何帮助都将是有帮助的。

我创建了一个数据访问类,以便使用单例方法获取数据。任何好的链接或文章都可能会有所帮助。

让我分享一下我的数据模型方法

DataAcess.cs

代码语言:javascript
运行
复制
public class DataAccess
{
    internal Model.Entities _ctx = null;
    private static DataAccess self = null;
    public object ModulePermission;

    private DataAccess()
    {
        var tmp = new ConnectionStringBuilder(Utility.GetConnectionString());
        _ctx = new Model.Entities(tmp.CaliberMatrixString);

        // temporarily dissabling the EF entity validation - it should be removed in the next code sync.
        _ctx.Configuration.ValidateOnSaveEnabled = false;
    }

    public static DataAccess Instance
    {
        get
        {
            var context = HttpContext.Current;
            if (context != null)
            {
                const string kApplicationSettings = "ApplicationObject";
                if (context != null && context.Items[kApplicationSettings] != null)
                {
                    var da = context.Items[kApplicationSettings] as DataAccess;
                    return da;
                }

                self = new DataAccess();
                context.Items[kApplicationSettings] = self;
            }
            else
            {
                self = new DataAccess();
            }
            return self;
        }
    }

    public void Save()
    {
        _ctx.SaveChanges();
    }

    internal Model.CaliberMatrixEntities Ctx { get { return _ctx; } }

    public void Dispose()
    {
        if (self != null)
        {
            //DataAccess.Instance.Dispose();
            const string kApplicationSettings = "ApplicationObject";
            var context = HttpContext.Current;
            if (context != null && context.Items[kApplicationSettings] != null)
                context.Items[kApplicationSettings] = null;
            _ctx.Dispose();
            _ctx = null;
            GC.SuppressFinalize(this);
            self = null;
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2019-01-10 08:24:56

600个表是一个很大的系统大小。需要考虑的几个因素是确定是否可以隔离应用程序/系统的各个区域以利用较小的DbContexts。(在有界上下文中搜索)这更容易使用DB-First方法进行设置,在这种方法中,您可以将EF配置为现有模式,而不是尝试让EF管理模式和迁移。上下文类越小,初始化速度越快。

另一个考虑因素是,我会对尝试使用静态上下文保持警惕。这暗示有一个比所需的DbContext更长的生命周期。DbContexts不会很好地“老化”,因为它们内置的更改跟踪意味着它们的内存使用量增加,性能随着它们意识到的实体数量的增加而下降。有界上下文将有助于DbContext的启动时间,这意味着您可以让它们保持较短的寿命。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54111074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档