Перевод из доменной модели в просмотр модели происходит медленно, когда источником данных является Azure DB (бесплатная версия) - PullRequest
0 голосов
/ 28 августа 2018

У меня есть класс домена Case, в котором есть несколько зависимых таблиц

public class Case
{
    public int CaseId { get; set; }
    public string Name { get; set; }
    public DateTime StartDateTime { get; set; }
    public DateTime? EndDateTime { get; set; }
    public virtual ICollection<CaseUser> CaseUsers { get; set; }
    public virtual ICollection<Sector> Sectors { get; set; }
    public virtual ICollection<CasePoaSerie> CasePoaSeries { get; set; }
    public virtual ICollection<Pod> Pods { get; set; }
    public virtual ICollection<Poa> Poas { get; set; }

    public Case()
    {
        CaseUsers = new Collection<CaseUser>();
        Sectors = new Collection<Sector>();
        CasePoaSeries = new Collection<CasePoaSerie>();
        Pods = new Collection<Pod>();
        Poas = new Collection<Poa>();
    }
}

Предположим, что в этой таблице 3 строки данных, и мой метод репозитория возвращает все эти 3 строки со значениями всех других зависимых таблиц (CaseUsers, Sectors, CasePoaSeries, Pods, Poas). Я перевожу эту модель предметной области в модель представления в своем классе клиента службы.

Мой код переводчика

public static class CaseTranslator
{
    public static Case UpdateToDomain(Models.Case modalcase)
    {
        var domaincase = new Case()
        {
            CaseId = modalcase.CaseId,
            EndDateTime = modalcase.EndDateTime,
            Name = modalcase.Name,
            StartDateTime = modalcase.StartDateTime,
        };

        modalcase.CaseUsers.ForEach(x => domaincase.CaseUsers.Add(CaseUserTranslator.UpdateToDomain(x)));
        modalcase.CasePoaSeries.ForEach(x => domaincase.CasePoaSeries.Add(CasePoaSeriesTranslator.UpdateToDomain(x)));
        modalcase.Sectors.ForEach(x => domaincase.Sectors.Add(SectorTranslator.UpdateToDomain(x)));
        modalcase.Poas.ForEach(x => domaincase.Poas.Add(PoasTranslator.UpdateToDomain(x)));

        return domaincase;
    }

    public static Models.Case UpdateToModel(Case domaincase)
    {
        if (domaincase == null)
        {
            return null;
        }
        var modalcase = new Models.Case()
        {
            CaseId = domaincase.CaseId,
            EndDateTime = domaincase.EndDateTime,
            Name = domaincase.Name,
            StartDateTime = domaincase.StartDateTime,
        };


        domaincase.CaseUsers.ForEach(x=> modalcase.CaseUsers.Add(CaseUserTranslator.UpdateToModel(x)));
        domaincase.Poas.ForEach(x => modalcase.Poas.Add(PoasTranslator.UpdateToModel(x)));
        domaincase.Pods.ForEach(x => modalcase.Pods.Add(PodsTranslator.UpdateToModel(x)));
        domaincase.CasePoaSeries.ForEach(x => modalcase.CasePoaSeries.Add(CasePoaSeriesTranslator.UpdateToModel(x)));
        domaincase.Sectors.ForEach(x => modalcase.Sectors.Add(SectorTranslator.UpdateToModel(x)));
        return modalcase;
    }
}

Каждый переводчик следует тому же шаблону.

Мой код обслуживания клиентов

public List<Case> GetCasesByUserId(int userId)
    {
        var activeCases = new List<Case>();
        var cases = _caseRepository.GetActiveCasesForUser(userId);
        cases.ForEach(o=> activeCases.Add(CaseTranslator.UpdateToModel(o)));
        return activeCases;
    }

Моя проблема Когда я использую LocalDb в качестве источника данных, мой метод очень быстрый, см. Скриншоты ниже.

Данные из localdb занимают ок. 124 мс чтобы получить данные. localdb извлечение данных

Моя система занимает ок. 392 мс перевести эти данные. localdb перевод данных

Теперь, если я изменю свой источник данных на лазурный дБ, это займет ок. 1,069 мс получить данные из базы данных.

поиск данных по Azuredb

Моя система занимает ок. 2,62,604 мс перевести эти данные, которые получены из azuredb. перевод данных azuredb

Мы ясно видим, что переводчику требуется больше времени (просто недопустимая задержка) для обработки того же объема данных, который очень быстро транслируется, если он поступил из localdb.

Сейчас я в замешательстве, так как не знаю, в чем реальная проблема.

Что-то не так с моим кодом переводчика или это Azure db отвечает за эту задержку?

Дополнительная информация. Я использую подход кода структуры сущности вначале с миграциями Мануэля. Лазурная БД, которую я использую, является бесплатным планом.

Лазурный план Мы используем общую плоскость, веб-сайт работает на сервере Azure, который является бесплатным планом, а база данных приложения работает на сервере Azure со стандартным планом.

1 Ответ

0 голосов
/ 28 августа 2018

Я решил эту проблему, с кодом проблем нет, вся проблема была из-за хостинга сайта.

Как я уже упоминал, когда мы размещали сайт в бесплатном плане Azure, он работает очень медленно по сравнению с localhost. Когда мы обновили план хостинга сайта, сайт стал быстрым.

Заключение. Если вы разместите свой веб-клиент в бесплатном плане Azure, производительность снизится. Обновление плана Azure до более поздней версии поможет вам добиться реальной скорости работы сайта.

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