【发布时间】:2019-05-15 19:18:27
【问题描述】:
到目前为止,我的列表中有很多数据要加载。当我使用普通(同步)方式加载数据时,加载所有数据大约需要 20 秒。我做了这个异步方法,现在我需要大约 7 秒来加载。 我想知道是否有办法加快速度,例如,一打开屏幕就加载前 20 张卡片,然后再加载其他所有内容?到目前为止,这是我的代码..
public async Task<List<CardObject>> GetCardsAsync()
{
using (var context = new MyCARDEntities())
{
return await context.Card
.Include(f => f.Person)
.Include(k => k.CardType)
.Where(arg => arg.LastAction != "D" && arg.PERSON_ID != null)
.Select(k => new CardObject()
{
Id = k.Id,
UID = k.UID,
Person = new PersonBasicObject()
{
Id = k.PersonBasicObject.Id,
OIB = k.PersonBasicObject.OIB,
Name = k.PersonBasicObject.Name,
LastName = k.PersonBasicObject.LastName
}
})
.ToListAsync();
}
}
这是在 viewModel 中
private async void LoadCards()
{
var cards = await repKartica.GetCardsAsync();
CardLst = new ObservableCollection<CardObject>(cards);
}
private ObservableCollection<CardObject> _CardLst;
public ObservableCollection<CardObject> CardLst
{
get => _CardLst;
set
{
_CardLst= value;
RaisePropertyChanged(() => CardLst);
}
}
【问题讨论】:
-
分析您发送到数据库的查询。确定您是否发送低效查询和/或缺少索引。
-
20 秒和 7 秒都是很长的时间。一种方法是修改你的应用,只返回前 20 张卡片,然后看看需要多长时间。它可能仍然很慢。如果从同步切换到异步会产生很大的不同,您是否会执行多个查询或多次执行相同的查询?有可能优化的方法,但如果有什么让你的应用变慢,最好找到它并直接解决它,而不是试图解决它。
标签: c# .net entity-framework mvvm