EF 6 проблема с медлительностью с большей моделью - PullRequest
0 голосов
/ 09 января 2019

Я использую EF 6 с первым подходом к БД и столкнулся с проблемой медлительности. Количество моих столов превышает 600. Любая помощь в этом отношении будет полезна.

Я создал класс доступа к данным, чтобы получать данные с использованием одноэлементного подхода. Любая хорошая ссылка или статья может помочь.

Позвольте мне поделиться своим подходом к модели данных

DataAcess.cs

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;
        }
    }

1 Ответ

0 голосов
/ 10 января 2019

600 таблиц - это значительный размер системы. Пара факторов, которые следует учитывать, состоит в том, чтобы определить, можно ли изолировать области приложения / системы для использования меньших DbContexts. (Поиск в ограниченном контексте) Это проще настроить, используя подход DB-First, в котором вы настраиваете EF для существующей схемы, а не пытаетесь позволить EF управлять схемой и миграциями. Меньшие классы контекста быстрее инициализируются.

Еще одним соображением было бы то, что я бы с осторожностью пытался использовать статический контекст. Это намекает на то, что DbContext прослужит дольше, чем нужно. DbContexts плохо «стареют», поскольку их встроенное отслеживание изменений означает, что их использование памяти увеличивается, а производительность снижается с увеличением числа объектов, о которых они узнают. Ограниченные контексты помогут со временем раскрутки DbContext, означая, что вы можете сохранить их недолговечными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...