powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ускорить вставку >60k записей
3 сообщений из 3, страница 1 из 1
ускорить вставку >60k записей
    #36940082
Фотография bbbdum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть один сервис, в котором insert/update более 60k записей, вставка иногда занимает до 5 мин, хочется ускорить это дело, так как база блокируется и часто возникают проблемы
примерный код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
for (int i=0;i<60000;i++)
{
var pr = new Record();
pr.Field1 = "sdsds"+i; // таких полей порядка 10-15
db.Records.InsertOnSunmit(pr);
}
db.SubmitChanges();
...
Рейтинг: 0 / 0
ускорить вставку >60k записей
    #36940174
Фотография bbbdum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
заюзал BulkCopy и DateTable
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
 public static class MyExtenders
    {
        public static DataTable ToDataTable<T>(this IEnumerable<T>
        collection)
        {
            DataTable dt = new DataTable();
            Type t = typeof(T);
            PropertyInfo[] pia = t.GetProperties().Where(x => IsAcceptableDbType(x)).ToArray();
            //Create the columns in the DataTable

            foreach (PropertyInfo pi in pia)
            {
                var attr = pi.Attributes;

                if (IsNullableType(pi.PropertyType))
                {
                    var nc = new NullableConverter(pi.PropertyType);
                    Type underlyingType = nc.UnderlyingType;
                    dt.Columns.Add(pi.Name, underlyingType);
                }
                else
                    dt.Columns.Add(pi.Name, pi.PropertyType);
            }
            //Populate the table
            foreach (T item in collection)
            {
                DataRow dr = dt.NewRow();
                dr.BeginEdit();
                foreach (PropertyInfo pi in pia)
                {
                    dr[pi.Name] = pi.GetValue(item, null) ?? DBNull.Value;
                }
                dr.EndEdit();
                dt.Rows.Add(dr);
            }
            return dt;
        }
        static bool IsAcceptableDbType(PropertyInfo pi)
        {
            return (pi.PropertyType.BaseType ==
                       Type.GetType("System.ValueType") ||
                       pi.PropertyType ==
                       Type.GetType("System.String"));
        }
        static bool IsNullableType(Type theType)
        {
            return (theType.IsGenericType && theType.
              GetGenericTypeDefinition().Equals
              (typeof(Nullable<>)));
        }
    }

и возник вопрос как исключить из пропертей EntityRef properties
сча юзаю такую конструкцию
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  static bool IsAcceptableDbType(PropertyInfo pi)
        {
            return (pi.PropertyType.BaseType ==
                       Type.GetType("System.ValueType") ||
                       pi.PropertyType ==
                       Type.GetType("System.String"));
        }
может есть попроще способ?
...
Рейтинг: 0 / 0
ускорить вставку >60k записей
    #36964094
stuffhappens
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bbbdum,

Советую в базе создать хранимку на вставление и вставлять через нее.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ускорить вставку >60k записей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]