Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ускорить вставку >60k записей / 3 сообщений из 3, страница 1 из 1
06.11.2010, 13:29
    #36940082
bbbdum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить вставку >60k записей
есть один сервис, в котором 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
06.11.2010, 15:17
    #36940174
bbbdum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить вставку >60k записей
заюзал 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
18.11.2010, 15:09
    #36964094
stuffhappens
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить вставку >60k записей
bbbdum,

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


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