мой запрос потребления продукта C # / MySQL занимает гораздо больше времени, чем время, отслеживаемое в коде

#c# #mysql #performance #datagridview

#c# #mysql #Производительность #datagridview

Вопрос:

У меня есть интерфейс C # с серверной частью MySQL 8 для базы данных моей компании. У меня есть запрос, который возвращает расход производственных материалов за один месяц путем инвентаризации материалов и отслеживания процесса проекта. У меня нет проблем с запросом, но время, потраченное на запрос (на самом деле много запросов).

Это настройка моего кода, запускаемая щелчком по ярлыку.

 private void lblQry_Click(xxx,xxx)
{ 
   DateTime startDT = DateTime.Now();
   DataTable qryResults = new DataTable(); datagridviewResult.DataSource = qryResults.
   //set up qryResults as Projects vs. materials consumeds and cost associated,
   (I will skip the actual codes here, but it consists several foreach loops with many queries to 
   assemble the consumption and cost data per project...)
   
   DateTime endDT=DateTime.Now(); TimeSpan ts=endDT-startDT; 
   MessageBox.Show("Query time: "   ts.Seconds.ToString());
}
  

Я запускал этот код много раз, результаты были проверены и проверены. Но для завершения требуется много времени, и время намного больше, чем отслеживание, которое я ввел в код, всплывающее сообщение, которое обычно показывало около 20-30 секунд, но фактическое время, когда данные появились в datagridview после того, как я щелкнул по метке, составляет более 10 минут.

Пожалуйста, кто-нибудь дает мне некоторые идеи относительно того, в чем проблема? Почему эти два раза так сильно отклоняются? Большое спасибо.

Комментарии:

1. Не могли бы вы нажать «Редактировать», затем выбрать выделение частей кода вашего вопроса и нажать {} кнопку над полем редактирования?

Ответ №1:

Не назначайте DataTable источнику данных datagridview, а затем начинайте заполнять таблицу; вы можете вызвать огромное количество обновлений и обновлений для datagridview. Если ваша таблица данных содержала тысячу элементов, и вам удалось запустить обновление сетки после каждого элемента item, она обновится тысячу раз

Заполните вашу таблицу, а затем назначьте ее источнику данных

Если вам абсолютно необходимо сначала выполнить это назначение, вызовите BeginLoadData / EndLoadData, который должен отключить загрузку материала для загрузки. Если вы все еще обнаруживаете, что таблица загружается за несколько секунд, но для завершения рендеринга ее обновлений требуется 10 минут, то нам, вероятно, потребуется просмотреть больше кода, чтобы понять, что занимает время

Комментарии:

1. Большое вам спасибо! Я назначил источник данных перед запуском кода, но в начале кода запроса я переназначаю его на null. Проблема заключалась в том, что я снова назначал источник данных после каждой новой строки, добавленной в datatable! Я изменил его до самого конца, и теперь время сократилось примерно до 1 минуты. Еще раз спасибо!