Как наиболее быстро залить DataSet данными
От: Sergey J. A. Беларусь  
Дата: 02.06.08 13:36
Оценка:
Есть некоторый DataSet, в него нужно залить около 40000 записей. Пока что использую DataTable.LoadDataRow как самый быстрый. Но и этот метод достаточно медленно работает у клиента.
Загрузка данных в виде xml (DataSet.LoadXml) работает быстрее, но данные не в виде XML. Есть мысль отконвертить данные в XML перед загрузкой, но как-то это мне не нравится...

Уже пробовал
1. DataTable.NewRow(); ...; DataTable.AddRow();
2. DataTable.Load

всё работает не быстрее DataTable.LoadDataRow....

Может кто знает быстрый способ "набить" пустой DataSet данными ?
http://azarkevich.blogspot.com
Re: Как наиболее быстро залить DataSet данными
От: white_znake  
Дата: 02.06.08 14:23
Оценка: 1 (1)
Здравствуйте, Sergey J. A., Вы писали:

SJA>Есть некоторый DataSet, в него нужно залить около 40000 записей. Пока что использую DataTable.LoadDataRow как самый быстрый. Но и этот метод достаточно медленно работает у клиента.

SJA>Загрузка данных в виде xml (DataSet.LoadXml) работает быстрее, но данные не в виде XML. Есть мысль отконвертить данные в XML перед загрузкой, но как-то это мне не нравится...

SJA>Уже пробовал

SJA>1. DataTable.NewRow(); ...; DataTable.AddRow();
SJA>2. DataTable.Load

SJA>всё работает не быстрее DataTable.LoadDataRow....


SJA>Может кто знает быстрый способ "набить" пустой DataSet данными ?


Я бы подумал о ленивой загрузке данных.
Зачем пользователю нужны все 40 000 записей?

Выбирай по 100 — 1 000 записей и будет тебе счастье.

Может стоит доработать view что бы данные выводились по-странично — "A-D", "E-H", "I-L" and etc?

В общем выход у тебя один уменьшать объем данных выводимых пользователю за один запрос
Re: Как наиболее быстро залить DataSet данными
От: white_znake  
Дата: 02.06.08 14:28
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

SJA>Есть некоторый DataSet, в него нужно залить около 40000 записей. Пока что использую DataTable.LoadDataRow как самый быстрый. Но и этот метод достаточно медленно работает у клиента.

SJA>Загрузка данных в виде xml (DataSet.LoadXml) работает быстрее, но данные не в виде XML. Есть мысль отконвертить данные в XML перед загрузкой, но как-то это мне не нравится...

SJA>Уже пробовал

SJA>1. DataTable.NewRow(); ...; DataTable.AddRow();
SJA>2. DataTable.Load

SJA>всё работает не быстрее DataTable.LoadDataRow....


SJA>Может кто знает быстрый способ "набить" пустой DataSet данными ?


Чуть было не забыл можешь посмотреть в сторону DataReader' ов
Re[2]: Как наиболее быстро залить DataSet данными
От: TK Лес кывт.рф
Дата: 02.06.08 21:56
Оценка:
Здравствуйте, white_znake, Вы писали:

_>Чуть было не забыл можешь посмотреть в сторону DataReader' ов


Лучше смотреть в сторону ResultSet` ов они намного ближе по поведению.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Как наиболее быстро залить DataSet данными
От: Sergey J. A. Беларусь  
Дата: 03.06.08 09:15
Оценка:
Здравствуйте, white_znake, Вы писали:

_>Я бы подумал о ленивой загрузке данных.

_>Зачем пользователю нужны все 40 000 записей?

Нужны все и сразу. Пользователь сканером вводит EAN, который является PK в одной из таблиц(причём самой большой). Нужно найти этот элемент и сделать с ним некоторые действия. Думаю тут ленивая загрузка не подходит...

Да, и сделать какой-то SELECT * FROM Items WHERE EAN='<user input>' тоже не выйдет — никакой СУБД(Ascess, SQ Server) нет. Данные лежат в файле в нашем формате и при старте скопом вычитываются и впихиваются в DataSet. По мере работы изменения в DataSet-е дописываются в файл.

Возможно изначально не стоило использовать DataSet...
http://azarkevich.blogspot.com
Re[2]: Как наиболее быстро залить DataSet данными
От: Sergey J. A. Беларусь  
Дата: 03.06.08 09:15
Оценка:
Здравствуйте, white_znake, Вы писали:

_>Чуть было не забыл можешь посмотреть в сторону DataReader' ов

Если имеется в виду работать с DataReader-ом вместо DataSet-а, то так не получится. Нужно активно искать и находить эелементы.
А если — реализовать IDataReader и передать в DataTable.Load, то так работает медленнее чем через LoadDataRow.
http://azarkevich.blogspot.com
Re: Как наиболее быстро залить DataSet данными
От: Аноним  
Дата: 04.06.08 14:32
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

SJA>Есть некоторый DataSet, в него нужно залить около 40000 записей. Пока что использую DataTable.LoadDataRow как самый быстрый. Но и этот метод достаточно медленно работает у клиента.

SJA>Загрузка данных в виде xml (DataSet.LoadXml) работает быстрее, но данные не в виде XML. Есть мысль отконвертить данные в XML перед загрузкой, но как-то это мне не нравится...

SJA>Уже пробовал

SJA>1. DataTable.NewRow(); ...; DataTable.AddRow();
SJA>2. DataTable.Load

SJA>всё работает не быстрее DataTable.LoadDataRow....


SJA>Может кто знает быстрый способ "набить" пустой DataSet данными ?


На ум всплывают две вещи:
1.датасет привязан к контролам
2.включены констрейнты.

выход — приостановка binding и констрейнтов.
Re[3]: Как наиболее быстро залить DataSet данными
От: HowardLovekraft  
Дата: 04.06.08 15:24
Оценка:
Здравствуйте, Sergey J. A., Вы писали:
SJA>Нужны все и сразу
SJA>Да, и сделать какой-то SELECT * FROM Items WHERE EAN='<user input>' тоже не выйдет — никакой СУБД нет
SJA>Возможно изначально не стоило использовать DataSet...
Кмк, из этого логически следует сделать так, чтобы СУБД была.
Re[4]: Как наиболее быстро залить DataSet данными
От: Sergey J. A. Беларусь  
Дата: 04.06.08 18:37
Оценка:
Здравствуйте, HowardLovekraft, Вы писали:

HL>Кмк, из этого логически следует сделать так, чтобы СУБД была.


Пока что все предпочитают мириться с тормозами, чем затевать такую переделку.
Возможно в будущем, когда-нибудь...
Re[2]: Как наиболее быстро залить DataSet данными
От: Sergey J. A. Беларусь  
Дата: 04.06.08 18:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>На ум всплывают две вещи:

А>1.датасет привязан к контролам
А>2.включены констрейнты.

А>выход — приостановка binding и констрейнтов.

Увы, не привязан, и констрейнты во время заливки отключены....
Re: Как наиболее быстро залить DataSet данными
От: Pavel_Agurov Россия  
Дата: 06.06.08 07:48
Оценка:
Интересное сравние производительности
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.