Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимальное использование DataSet(-ов), Посоветуйте! 
:(
    Опции темы
xess
Дата 2.4.2007, 03:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 9.3.2007

Репутация: нет
Всего: нет



В Access имеется 4 таблицы, которые будут содержать от 500 до 1000 записей примерно. Также имеется 8 маленьких таблиц-справочников (от 5 до 20 записей). Все таблицы связаны.

Собираюсь работать с этими таблицами через DataSet. Так вот вопрос: не рационально ведь создавать один DataSet для всех таблиц? Если да, то по какому принципу создавать несколько DataSet'ов? И как, например, потом можно с ними работать, если таблицы будут в разных датасетах, но по логике связаны отношением один-к-одному или один-ко-многим? Т.е. если вдруг понадобится отобразить в DataGridView запись, один из атрибутов который связан с таблицей-справочником из другого датасета?  smile 

Это сообщение отредактировал(а) xess - 2.4.2007, 03:35
PM MAIL   Вверх
Idsa
Дата 2.4.2007, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(xess @  2.4.2007,  03:33 Найти цитируемый пост)
не рационально ведь создавать один DataSet для всех таблиц?

По-моему DataSet просто создан для твоей ситуации smile. Ведь по большому счету DataSet нужен для того, чтобы объединить множество DataTable, используя (или не используя) DataRelation. Поэтому я не вижу причину разбивать единую иерархию таблиц на несколько.

Единственное, что могло бы заставить меня задуматься над разделением таблиц на несколько DataSet'ов, - экономия памяти в случае малой востребованности некоторых таблиц. Если у тебя именно такая ситуация, то можешь подгружать не все таблицы разом, а по отдельности: сначала основные, а потом (по мере необходимости) - маловостребованные.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
ivashkanet
Дата 2.4.2007, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 4
Всего: 149



xess, я вижу смысл таблиц только если ты собираешься отображать эту таблицу 1:1 на гриде.
Если отображаемые данные берутся из разных таблиц, то лучше и создать такую таблицу в датасете.

Например, у меня в проекте есть много таблиц, отображаю же я только часть одной таблицы, сложная выборка из нескольких других, и пара информационных таблиц. На всех их заведены адаптеры с таблицами в датасете, но только на них.

Всю остальную информацию я получаю небольшими запросами: сколько того-то, столько того-то, получить информацию о конкретной записи...

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

Просто для информации:
ДатаСет это просто каркас, на который насаживаются таблицы, которые, в свою очередь, каркас для записей таблиц.
Так что если записей не будет, то и таблица, и за ней ДатаСет много памяти не съест (несколько килобайт для .Net даже не учитываются).

PM MAIL WWW ICQ   Вверх
FreakK
Дата 2.4.2007, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 1.7.2005
Где: Lviv (Ukraine)

Репутация: нет
Всего: нет



Полностью согласен с ivashkanet, 
дело в том что до вызова TableAdapter.Fill(datatable); или DataSet1.dataTable.Load(datareader);
в таблице никакой инфы не будет а пожже когда она уже ненужна сам об’экт можно почистить.

А само присутствие такого об’экта как DataTable в памяти много ресурсов не сест(если он не заполнен).

Я считаю не стоит использовать несколько датасетов ето попортит логику проекта если он большой.
PM ICQ   Вверх
xess
Дата 2.4.2007, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 9.3.2007

Репутация: нет
Всего: нет



Всем спасибо за советы!

Просто прочитал в книжке "ADO.NET 2.0 для профессионалов" что:
Цитата

Учтите, что при наличии большого строго типизированного DataSet со, скажем, 40 таблицами (боже упаси иметь столько!) - даже если эти таблицы пусты - затраты все равно существенны.


Поэтому и задался вопросом как обычно люди делают smile
До этого и сам считал что запихать все таблицы в один Датасет нормально smile
PM MAIL   Вверх
ivashkanet
Дата 2.4.2007, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 4
Всего: 149



Цитата(xess @  2.4.2007,  14:37 Найти цитируемый пост)
До этого и сам считал что запихать все таблицы в один Датасет нормально

Я считаю, что это ненормально.
Цитата(ivashkanet @  2.4.2007,  12:55 Найти цитируемый пост)
я вижу смысл таблиц только если ты собираешься отображать эту таблицу 1:1 на гриде.

Цитата(xess @  2.4.2007,  14:37 Найти цитируемый пост)
боже упаси иметь столько!

Нужно подчеркнуть.

PM MAIL WWW ICQ   Вверх
xess
Дата 2.4.2007, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 9.3.2007

Репутация: нет
Всего: нет



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

или я не совсем понял содержание твоего последнего поста?  smile 
PM MAIL   Вверх
ivashkanet
Дата 2.4.2007, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 4
Всего: 149



Цитата(xess @  2.4.2007,  14:37 Найти цитируемый пост)
даже если эти таблицы пусты - затраты все равно существенны.

Книжку на помойку smile

Краш-тест показал, что 1000 пустых таблиц с 10 колонками кушает "всего" около 6,5 Мб памяти. 
Т.о. 6,5 Кб на 1 таблицу --- не так уж и много для приложения, которое пустое (одна форма) кушает 13 Mb оперативки. Плюс, если таблицы будут заполняться, то счет пойдет на 10-ки мегабайт
Кроме того не каждая таблица похвастается 10 столбцами smile

Цитата(xess @  2.4.2007,  15:11 Найти цитируемый пост)
я имел ввиду что пустые таблицы (каркасы для записей) нормально запихать в один датасет

Я говорю о том, что заводить нужно только только те таблицы, которые ты будешь отображать их на форме.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.