Ramug10 Ответов: 3

Создание больших данных в таблице данных C# выполняется очень медленно.


дорогой друг,

В моем Asp.Net приложение c#

мы создаем datatable с 10K записями и 120 столбцами, это занимает более 2 часов, чтобы завершить datatable.

Ниже приведен код, который я использую, пожалуйста, помогите мне
foreach (DataColumn dc in policyLevelTable.Columns)
{
    for (int i = 1; i <= 10000; i++)
    {
        if (dc.ColumnName.ToLower() == "policyid")
        {
            DataRow newdr = policyLevelTable.NewRow();
            newdr[0] = i;
            // newdr[1] = 1;
            policyLevelTable.Rows.Add(newdr);
        }
        else
        {
            DataRow[] dr = policyLevelTable.Select("policyid in (" + i + ")");
            dr[0][dc.ColumnName] = RandomParameterType(new List<int>{1,2,3,4}, 0, false);
        }
    }
}


Спасибо,
Раму.

Что я уже пробовал:

foreach (DataColumn dc в policyLevelTable.Столбцы)
{
for (int i = 1; i <= 10000; i++)
{
если (округ Колумбия.Имя_столбца.ToLower () = = " policyid")
{
DataRow newdr = policyLevelTable.Невров();
newdr[0] = i;
// newdr[1] = 1;
policyLevelTable.Строк.Добавить(newdr);

}
ещё
{
DataRow[] dr = policyLevelTable.Select ("policyid in ("+ i + ")");

dr[0][dc. ColumnName] = RandomParameterType(new List<int> { 1, 2, 3, 4 }, 0, ложь);


}
}
}

Philippe Mori

Вы написали дважды один и тот же код. Один раз в правильно отформатированном блоке кода и один раз в виде неформатированного текста. Какова цель этого?

3 Ответов

Рейтинг:
1

OriginalGriff

Сделайте это наоборот: пройдите через строки как внешний цикл, а затем заполните каждый столбец внутри него. Таким образом, вам не нужно делать это (вероятно, отнимая много времени) .Выделите для каждой ячейки в каждой строке, вы можете полностью опустить ее, так как вы всегда будете работать с одной и той же строкой.
Кроме того, если вам не нужен новый список каждый раз, создайте его вне всех циклов.
Затем проверьте RenadomParamaterType и посмотрите, что он делает и сколько времени это занимает.


Рейтинг:
1

F-ES Sitecore

Создание 10 тысяч строк никогда не будет быстрым. В любом случае, что вы ожидаете от пользователя с 10 тысячами строк? Если они потратят 3 секунды на каждую строку, то им потребуется 8 часов, чтобы обработать все строки. Показывая, что большой объем данных бесполезен, реализуйте подкачку и поиск так, чтобы вы показывали только уменьшенный объем данных или только те данные, которые релевантны.


#realJSOP

"Почему" это не имеет значения, ИМХО.

Рейтинг:
1

#realJSOP

Я не знаю, сколько времени это займет, но там меньше кода, так что серебряные накладки...

Random random = new Random();
for (int i = 1; i &lt;= 10000; i++)
{
    DataRow newdr = policyLevelTable.NewRow();
    for (int j = 0; j < policyLevelTable.Columns.Count; i++)
    {
        newdr[j] = (j==0) ? j : random.Next(5);
    }
}


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