Вызов базы данных ToListAsync - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть проект на .NET Core 2.2 с множеством функций, которые запрашивают базу данных, используя linq.Примером может служить следующий пример с использованием функции GetAllArticles:

 public IViewComponentResult Invoke(int page)
    {
        if( page < 1)
        {
            page = 1;
        }

        List<CheltenhamNews> allArticles = RaceArticleFunctions.GetAllArticles(_homeController.customerVW);

        int articleCount = allArticles.Count();
        int tipArticlesCount = 20;

        ViewData["PageCount"] = articleCount / tipArticlesCount;
        ViewData["CurrentPage"] = page;

        allArticles = allArticles.Skip((page - 1) * tipArticlesCount).Take(tipArticlesCount).ToList();

        return View(allArticles);
    }

GetAllArticles:

     public static List<CheltenhamNews> GetAllArticles(CmsViewsContext db)
    {
        return db.CheltenhamNews.Where(x => x.subcategoryId == 91).OrderByDescending(x => x.published).ToList();
    }

Повысит ли этот метод Async, используя await и изменив ToList на ToListAsync, производительность?

Другим примером может быть функция, которая сохраняет результаты в кэше после использования вызова базы данных, если он еще не кэширован:

  public static IList<meeting> GetFestivalMeetingsUsingHotCache(DateTime festivalStartDate, int festivalLength)
    {
        string cacheKey = string.Format("FestivalMeetings-Year:{0},Length{1}", festivalStartDate.Year, festivalLength);
        InMemoryCacheService hotCache = new InMemoryCacheService();
        IList<meeting> festivalMeetings = hotCache.GetDataFromCache<IList<meeting>>(cacheKey);

        if( festivalMeetings == null)
        {
            festivalMeetings = GetFestivalMeetingsFromDatabase(festivalStartDate, festivalLength);
            hotCache.SaveDataToCacheWithArgs(cacheKey, festivalMeetings, 60, typeof(DataAccessLayer), "GetFestivalMeetingsFromDatabase", new object[] { festivalStartDate, festivalLength });
        }

        return festivalMeetings;
    }

С функцией базы данных:

  public static IList<meeting> GetFestivalMeetingsFromDatabase(DateTime festivalStartDate, int festivalLength)
    {
        IList<meeting> meetings;

        var festivalRange = new
        {
            Start = festivalStartDate.Date,
            End = festivalStartDate.Date.AddDays(festivalLength - 1)
        };

        using (CamelotViewsStandardContext db = new CamelotViewsStandardContext() )
        {
            meetings = db.meetings.Include("races").Where(x => x.courseId == 10 && x.meetingDate >= festivalRange.Start && x.meetingDate <= festivalRange.End).OrderBy(x => x.meetingDate).ToList();
        }

        return meetings;
    }

Спасибо.

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