Запустите приложение быстрее с помощью Run Query at Start - PullRequest
0 голосов
/ 10 декабря 2018

Когда приложение запускается, выполняется несколько запросов.

Теперь, поскольку объем информации увеличился (размер базы данных SQLite 500 КБ), программа запускается с задержкой в ​​5 секунд.Что я должен сделать, чтобы запустить приложение быстрее?

Это код, который я написал:

public void getInitialData()
{
    try
    {
        using (var db = new DataClass.myDbContext())
        {
            var query = db.Schools.ToList();
            txtScCount.Text = query.Count().ToString();
            var query2 = db.Users.ToList();
            txtUCount.Text = query2.Count().ToString();
            var query3 = db.Students.ToList();
            txtStCount.Text = query3.Count().ToString();
        }
    }
    catch (Exception)
    {
    }
}

private void getSchool()
{
    try
    {
        using (var db = new DataClass.myDbContext())
        {
            var query = db.Schools.Select(x => x);
            if (query.Any())
            {
                cmbEditBase.ItemsSource = query.ToList();
            }
        }
    }
    catch (Exception)
    {
    }
}

private void UserControl_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
    getInitialData();
    getSchool();
    cmbEditBase.SelectedIndex = Convert.ToInt32(FindElement.Settings.DefaultSchool);
    getTopStudent(Convert.ToInt64(cmbEditBase.SelectedValue));

    try
    {
        using (var db = new DataClass.myDbContext())
        {
            long baseId = Convert.ToInt64(cmbEditBase.SelectedValue);
            var query = db.Scores.Join(
               db.Students,
               c => c.StudentId,
               v => v.Id,
               (c, v) => new DataClass.DataTransferObjects.StudentsScoresDto { Id = c.Id, BaseId = v.BaseId, StudentId = v.Id, Name = v.Name, LName = v.LName, FName = v.FName, Scores = c.Scores }
           ).Where(y => y.BaseId == baseId).ToList();
    }
}

1 Ответ

0 голосов
/ 10 декабря 2018

Не загружайте всю таблицу в память:

var query = db.Schools.ToList();
txtScCount.Text = query.Count().ToString();

Если все, что вам нужно, это количество записей, то просто получите количество записей:

txtScCount.Text = db.Schools.Count().ToString();

Позвольте Entity Framework помочь вам оптимизировать ваши запросы данных к ядру базы данных.Механизмы баз данных действительно хороши в оптимизации путей выполнения запросов.Не просто загружайте всю свою базу данных в массивы в памяти и пытайтесь оптимизировать себя.

Кроме того, код, который вы показываете, действительно не имеет тяжелых операций.Удостоверьтесь, что вы конкретно подтверждаете, где / где находится ваше фактическое узкое место.Я бы смущался предположить, что это из жалких 500 КБ данных.В масштабе больших объемов данных 500 КБ данных неотличимы от данных.

Примечание: Вы , вероятно, не должны этого делать:

catch (Exception)
{
}

Что говорит код: "если вообще когда-либо возникнет ошибка, я не хочузнать об этом. "Поэтому, если вы когда-нибудь пытаетесь найти ошибку или странную ошибку, просто помните, что вы специально указали коду не сообщать вам, если что-то пойдет не так:)

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

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