У меня есть проект на .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;
}
Спасибо.