У меня серьезные проблемы со скоростью, связанные с ef6 и представлением списка объектов, особенно при применении текстового фильтра.Когда у меня его нет, все в порядке.
private void FilterJobs()
{
Cursor = Cursors.WaitCursor;
if (jobsFilterTextBox.Text.Length > 0)
{
jobsList.ModelFilter = new TextMatchFilter(jobsList, jobsFilterTextBox.Text, StringComparison.InvariantCultureIgnoreCase);
jobsFilterButton.Enabled = false;
jobsClearFilterButton.Enabled = true;
jobsFilterLabel.Text = string.Format("{0} of {1} records", jobsList.Items.Count, ((System.Collections.ArrayList)jobsList.Objects).Count);
}
Cursor = Cursors.Default;
}
Я устанавливаю свой список заданий следующим образом:
private void BindJobs()
{
try
{
List<Job> jobs = null;
if (showLiveJobsOnlyCheckBox.Checked)
{
jobs = new JobRepository(new UnitOfWork()).Find(x => x.JobStatusID != (int) JobStatusEnum.Cancelled && x.JobStatusID != (int) JobStatusEnum.Complete).OrderByDescending(x => x.ID).ToList();
}
else
{
jobs = new JobRepository(new UnitOfWork()).GetAll().OrderByDescending(x => x.ID).ToList();
}
jobsList.LoadObjects(jobs);
}
catch (Exception ex)
{
ExceptionManager.HandleUnexpectedException(ex);
}
}
Ниже приведен метод поиска изВышеупомянутый метод и мой метод getall.
public override IQueryable<Job> Find(Expression<Func<Job, bool>> predicate)
{
return DbSet
.Include(x => x.JobLines).AsNoTracking()
.Include(x => x.Customer).AsNoTracking()
.Include(x => x.SysCurrency).AsNoTracking()
.Include(x => x.JobStatus).AsNoTracking()
.Where(predicate);
}
Мой метод Getall.
public virtual IEnumerable<T> GetAll()
{
return DbSet.AsNoTracking().AsEnumerable().ToList();
}
Как вы видите, я добавил asnotracking в надежде, что это ускорит его и начальная загрузка будет быстрой, нокогда пользователь выбирает раздел, в котором отображаются только живые задания, но имя клиента все еще находится в фильтре, это мучительно медленно.
Изменить 2
Это показывает, что я используюPerformance Pro Filler, который приводит меня к этим функциям, которые вызываются из проверенного измененного события.
![enter image description here](https://i.stack.imgur.com/ht8ZM.png)
Редактировать 3
Чтобы показать мои методы загрузки объектов.
public static void LoadObjects(this ObjectListView objectListView, IEnumerable objects)
{
Form form = objectListView.FindForm();
try
{
if (form != null)
form.Cursor = Cursors.WaitCursor;
objectListView.BeginUpdate();
objectListView.ClearObjects();
objectListView.SetObjects(objects);
}
finally
{
objectListView.EndUpdate();
if (form != null)
form.Cursor = Cursors.Default;
}
}