Сохранение данных в SQL со многими условиями затем извлекает данные из SQL для сравнения перед сохранением каждой записи - PullRequest
0 голосов
/ 24 сентября 2019

Условия - если эта запись уже существует, если адрес электронной почты в этой записи является действительным или находится в другой таблице.я зацикливаю данные из таблицы Excel, загружая их и зацикливая в записях, мой код работает хорошо и сохраняет в базе данных, но проблема в том, что на завершение работы уходит много времени, как 4 дня, для сравнения и сохранения записей в 200 000 ... янужен лучший способ

var Email = dt.Rows[j][3].ToString();
                List<AllBounced> bounce = cnx.AllBounceds.Where(x => x.Email == Email).ToList();
                List<MainField> mainfield = cnx.MainFields.Where(x => x.Email == data.Email).ToList();
                List<MainField> mainfield2 = cnx.MainFields.Where(x => x.Phone == data.Phone || x.Mobile == data.Mobile).ToList();
                if (data.Email != null)
                {
                    if (IsEmailValid(Email) == true)
                    {
                        if (mainfield.Count != 0)
                        {
                            MainFieldsDuplicate data2 = new MainFieldsDuplicate
                            {
                                Id = Guid.NewGuid(),
                                FirstName = dt.Rows[j][0].ToString(),
                                MiddleName = dt.Rows[j][1].ToString(),
                                LastName = dt.Rows[j][2].ToString(),
                                Email = dt.Rows[j][3].ToString(),
                                Phone = dt.Rows[j][4].ToString(),
                                Mobile = dt.Rows[j][5].ToString(),
                                a= dt.Rows[j][6].ToString(),
                                b= dt.Rows[j][7].ToString(),
                                c= dt.Rows[j][8].ToString(),
                                d= dt.Rows[j][9].ToString(),
                                e= dt.Rows[j][11].ToString(),
                                f= dt.Rows[j][12].ToString(),
                                j= dt.Rows[j][14].ToString(),
                                isDeleted = 0,
                                h= dt.Rows[j][13].ToString(),
                                Date = GetDateTime(dt.Rows[j][10].ToString()),
                            };
                            cnx.MainFieldsDuplicates.Add(data2);
                            cnx.SaveChanges();
                        }
                        else
                        {
                            if (bounce.Count != 0)
                            {
                                data.isBounce = true;
                            }
                            else
                            {
                                data.isBounce = false;
                            }
                            data.isValid = true;
                            cnx.MainFields.Add(data);
                            cnx.SaveChanges();
                        }
                    }

                    else
                    {
                        if (mainfield.Count != 0)
                        {
                            MainFieldsDuplicate data2 = new MainFieldsDuplicate
                            {
                                Id = Guid.NewGuid(),
                                FirstName = dt.Rows[j][0].ToString(),
                                MiddleName = dt.Rows[j][1].ToString(),
                                LastName = dt.Rows[j][2].ToString(),
                                Email = dt.Rows[j][3].ToString(),
                                Phone = dt.Rows[j][4].ToString(),
                                Mobile = dt.Rows[j][5].ToString(),
                                a= dt.Rows[j][6].ToString(),
                                b= dt.Rows[j][7].ToString(),
                                c= dt.Rows[j][8].ToString(),
                                d= dt.Rows[j][9].ToString(),
                                e = dt.Rows[j][11].ToString(),
                                f= dt.Rows[j][12].ToString(),
                                j= dt.Rows[j][14].ToString(),
                                isDeleted = 0,
                                h = dt.Rows[j][13].ToString(),
                                Date = GetDateTime(dt.Rows[j][10].ToString())
                            };
                            cnx.MainFieldsDuplicates.Add(data2);
                            cnx.SaveChanges();
                        }
                        else
                        {
                            if (bounce.Count != 0)
                            {
                                data.isBounce = true;
                            }
                            else
                            {
                                data.isBounce = false;
                            }
                            data.isValid = false;
                            cnx.MainFields.Add(data);
                            cnx.SaveChanges();
                        }
                    }
                }
                else
                {
                    if (mainfield2.Count != 0)
                    {
                        MainFieldsDuplicate data3 = new MainFieldsDuplicate
                        {
                            Id = Guid.NewGuid(),
                            FirstName = dt.Rows[j][0].ToString(),
                            MiddleName = dt.Rows[j][1].ToString(),
                            LastName = dt.Rows[j][2].ToString(),
                            Email = dt.Rows[j][3].ToString(),
                            Phone = dt.Rows[j][4].ToString(),
                            Mobile = dt.Rows[j][5].ToString(),
                            a= dt.Rows[j][6].ToString(),
                            b= dt.Rows[j][7].ToString(),
                            c= dt.Rows[j][8].ToString(),
                            d= dt.Rows[j][9].ToString(),
                            e= dt.Rows[j][11].ToString(),
                            f= dt.Rows[j][12].ToString(),
                            j= dt.Rows[j][14].ToString(),
                            isDeleted = 0,
                            h= dt.Rows[j][13].ToString(),
                            Date = GetDateTime(dt.Rows[j][10].ToString())
                        };
                        cnx.MainFieldsDuplicates.Add(data3);
                        cnx.SaveChanges();
                    }
                    else
                    {
                        cnx.MainFields.Add(data);
                        cnx.SaveChanges();
                    }

1 Ответ

0 голосов
/ 25 сентября 2019

Возможно, вы захотите профилировать свое приложение, чтобы определить, какие части вам нужно оптимизировать, например, просто используя Класс секундомера .

В вашем случае основными подозреваемыми являются вызовыконтекст, то есть SaveChanges и Where/ToList.Единственное, что вы можете попробовать, это избегать вызова SaveChanges в контексте каждой итерации, см. Этот вопрос .Другой способ (если это возможно) - загрузить списки AllBounced и MainField в память заранее.

...