Приложения замедляются при получении отличных от 50k + записей из datatable в C#
У меня есть медлительность приложения, когда я предполагаю, чтобы получить отчетливый из DataTable, который имеет 50k + записей. для этого я использую приведенный ниже код
/// <summary> /// Generate Distinct Data Table from the Data Table Generated from server. /// </summary> Func<CancellationTokenSource, DataGridCollectionView, DataTable, DataTable> GetDistinctTable = (cancellationToken, DqmDataGridCollectionView, ResultDataTable) => { var distinctCol = DqmDataGridCollectionView.SortDescriptions.ToList(); if (distinctCol.Any()) { var _distinctColumns = from n in distinctCol select new { col = n.PropertyName.Split('_')[1] }.col; var dtLinq20 = new DataTable(); foreach (var item in _distinctColumns) { var existingColumn = ResultDataTable.Columns[item]; var _dColumn = new DataColumn { ColumnName = existingColumn.ColumnName, DataType = existingColumn.DataType, DefaultValue = existingColumn.DefaultValue, AllowDBNull = existingColumn.AllowDBNull, Caption = existingColumn.Caption }; dtLinq20.Columns.Add(_dColumn); } DataTable DistinctDataTable = null; try { DistinctDataTable = ResultDataTable.AsEnumerable().AsParallel().WithCancellation(cancellationToken.Token) .Select(row => { var newRow = dtLinq20.NewRow(); foreach (var item in _distinctColumns) { newRow[item] = row[item]; } return newRow; }) .Distinct(DataRowComparer.Default).CopyToDataTable(); } catch (Exception) { return null; } DistinctDataTable.TableName = "Distinct_TBL"; return DistinctDataTable; } return null; };
Но для меня это занимает слишком много времени загрузки моих приложений. может ли кто-нибудь предложить мне лучшее решение?
Что я уже пробовал:
Я попробовал приведенный выше код, и похоже, что он никак не работал. хотя я использую асинхронность и вызываю асинхронность, мое приложение замедляется.
Patrice T
"но для меня это занимает слишком много времени загрузки моих приложений."
Gold$Coin
Код, который я вставил выше, был работой, которую я сделал в своем приложении. мне нужно знать все, что мне нужно оптимизировать с помощью кода, чтобы улучшить свою производительность.
Patrice T
О КАКОМ ВРЕМЕНИ ВЫ ГОВОРИТЕ ?
Gold$Coin
Более 4 мин.
Sinisa Hajnal
Измените запрос. Напишите хранимую процедуру, которая вернет именно те данные, которые вам нужны, в нужном вам формате. База данных умеет работать с большими массивами данных. Код использует циклы, которые медленны и неэффективны для такого рода задач. Особенно потому, что у вас есть несколько циклов, как явных, так и неявных через linq.
Philippe Mori
Правильно спроектируйте базу данных, чтобы вы могли индексировать соответствующие столбцы. Кроме того, вам может потребоваться разработать таблицы таким образом, чтобы у вас уже были различные значения в соответствующих таблицах.
Если бы мы увидели дизайн таблиц и желаемые данные, мы могли бы сделать более конкретные предложения.
Кроме того, если вы не используете весь столбец, то не загружайте (много) ненужной информации.
Gold$Coin
я обязательно попробую это сделать.
Gold$Coin
Ya столбцы базы данных хорошо определены, так как проект, над которым я работал, был инвестиционным обслуживанием системы. так что таблицы и хранимые процедуры хороши. Но манипуляция данными была сложной. потому что мы генерируем что-то вроде тепловой карты в datagrid, поэтому мы используем некоторое сложное сравнение данных. раньше, когда мы начинали работать над ним, у нас была огромная медлительность в нашем приложении. и мы использовали много логики, и некоторые внутренние фреймворки помогают сделать что-то быстрее (30%), но медленной частью было только получение отличной таблицы от фактической таблицы данных. поэтому я хочу оптимизировать это.
Philippe Mori
Ну, трудно иметь хорошее представление о вашей таблице и данных, и код кажется необычным...
Вы пробовали писать код вручную? Вы можете использовать сортировку или сортированные/хэшированные контейнеры, чтобы легко найти повторяющиеся строки...
50000 строк из одной таблицы-это не так уж много. Используя правильный алгоритм, вы должны быть в состоянии найти четкую строку в кратчайшие сроки... за исключением тех случаев, когда сами ваши ряды очень велики...
Philippe Mori
Дайте нам больше информации с конкретным образцом.