|
|
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
Товарищи, Начал разбираться с ADO .NET, так понимаю, что хранение данных в локальной памяти позволяет ускорить работу и не обращаться лишний раз к SQL серверу. Так вот в чем вопрос: Открывается веб - страница, происходит обращение к БД, выбирается некое под-множеество записей (в соответствие с переданными параметрами, состоянием веб сессии и т.п.), их нужно отбразить на странице. Если я заполняю Typed DataSet этими записями: DataTable table = new DataTable("ProductTable"); SqlCommand sqlStr = new SqlCommand("select * from " + Session["TableName"], conn); SqlDataAdapter dataAdapter = new SqlDataAdapter(); dataAdapter.SelectCommand = sqlStr; ProductDataGrid.DataSource = table; dataAdapter.Fill(table); ProductDataGrid.DataBind(); Далее, если мне нужно просто пересортировать или отфильтровать полученный набор данных - мне же не обязательно обращаться к БД, - можно ли эти операции (сортировки, поиска) выполнять над локальной таблицей, загруженной в Typed DataSet? Потому что перезаполнять его я буду только тогда, когда уже понадобится какой-то другой фрагмент. То есть вопрос в том, возможно ли такое вообще (как проверять, загружено уже что-то в локальную таблицу или нет?), и даст ли это прирост скорости? И еще: создавать датасет лучше вручную (на лету) или надо создать некий dataset.xsd в папке App_Code? -там же можно и таблицы и тп.п или опять же лучше создавать/привязывать/заполнять в момент выполенния запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 15:21 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
лучше вообще датасетами не пользоваться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 15:39 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
зы лучше вообще датасетами не пользоваться обоснуйте, pls... _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 15:56 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
Ex_Soft обоснуйте, pls... а что обосновывать, и так всем все давно ясно, что датасеты - это зло. Они извращают ум и толкают на написание галимого кода. Имхо с появлением DLINQ о датасетах вполне можно забыть, тот же RAD теперь возможен и с более прогрессивными технологиями :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 16:28 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
зы датасеты - это зло Ну... Это я уже не первый раз слышу... Однако на это + это получил... _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 16:40 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
Ex_Soft Ну... Это я уже не первый раз слышу... Однако на это + это получил... слушай, иди со своими загадками и ссылками на посты в другое место, утомил. Пиши своими словами, а не чужими цитатами. Мнение пользователя i see для меня не является авторитетным и каких-либо обоснований чтобы поддержать его точку зрения в указанных постах я не увидел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 16:51 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
зыа что обосновывать, и так всем все давно ясно, что датасеты - это зло. Они извращают ум и толкают на написание галимого кода. Имхо с появлением DLINQ о датасетах вполне можно забыть, тот же RAD теперь возможен и с более прогрессивными технологиями :) бугага! а датасет - это такая прогрессивная технология, с появлением которой все забыли о рекордсетах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 17:46 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
пых бугага! а датасет - это такая прогрессивная технология, с появлением которой все забыли о рекордсетах ну, все понемногу эволюционирует :) но связывать свою жизнь с таблицами, обмазанными методами, это плохо. О чем-либо более сложном я даже боюсь тут заикнуться, надо человека подталкивать потихоньку, иначе испугается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 18:01 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
зы эволюционирует Хорошо... В контексте эволюции: что можете предложить? ЭстЪ тариф , франшиза . Они в риске . РискИ в обЪекте . ОбЪектЫ в договоре . Кроме того в договоре ЭстЪ контрагенты со своими адресами , документами , банковскими реквизитами и пр. И все это вываливаецо для вводиловки. Разделить - не имеет смысла. Оператор должен видеть все. Посткольку все взаимосвязанно. Причем с этим необходимо "играться": изменить тариф/франшизу, добавить/удалить риск/обЪект/контрагента и посмотреть что из этого получиться. И только окончательный вариант сохранить в БД. _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 18:12 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
любой ORM отлично справится с сохранением дерева данных в одной транзакции, при этом необходимого кода будет буквально одна строка - соранить рутовый объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 18:18 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
зыну, все понемногу эволюционирует :) но связывать свою жизнь с таблицами, обмазанными методами, это плохо. О чем-либо более сложном я даже боюсь тут заикнуться, надо человека подталкивать потихоньку, иначе испугается может все-таки не надо подталкивать? просто мозги вправить на место - и не придется заикаться о сложном... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 18:22 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
пых может все-таки не надо подталкивать? просто мозги вправить на место - и не придется заикаться о сложном... вправляй, у меня на датасеты аллергия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 18:35 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
спасибо, но я тоже не работаю с датасетами :) афтар, на веб-странице надо вытащить из базы только то, что на ней отображается. кешировать данные БД в датасетах или еще где имеет смысл в очень редких случаях, когда данных мало и они очень редко меняются. в этом случае дешевле весь датасет поместить в кеш минут на аццать. и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 18:54 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
пых на веб-странице надо вытащить из базы только то, что на ней отображается Угу... Пон... Только, вот, есть один ньюанс: некоторые значения имеют min && max значение. Опять же - каждому страховому продукту соответствует свой набор обЪектов и рискоф. И т.д. и т.п. И все это нужно учесть/проверить. И что же - прикажете при каждом submit'е при "игре" с параметрами в БД лазить? Не вопрос. Но только вот таких операторов ~1000-1500. Опять же НСИ в БД слегка join'ов с ~5-6 нуна, что бы получить. Да и блокировочник со всеми вытекающими. Ну и, для начала, как все сие добро между postback'ами держать посоветуете? Ну и сохранить. По-людськи. С repeatable read'ом для документов, в случае модификаций. Не спорю: к dataset'у пришли от WinApp, в коем, в свое время, ваялсо обЪект, со всем функционалом. А тут - почти тот же функционал (даже больше). Предлагайте альтернативы - бум рассматривать и тянуцо к свету/знаниям/новым_веяниям _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 22:39 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
Ex_Soft ..бла-бла-бла.. все что ты написал не более чем расфуфыренные слова. Не думай, что твоя проблема настолько уникальна, что ты единственный знаешь верное решение. Что такое "блокировочник" и что из него вытекает? я твой старорусский непонимать. А "repeatable read для документов"? Вообще, судя по твоему красочному описанию, страница у тебя должна открываться минуты 2, не иначе. Если это так, то пора сменить работу или позвать в помощь DBA. Если не так, то она вполне переживет пост-беки, сделанные с умом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 22:59 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
Ex_Soft Угу... Пон... Только, вот, есть один ньюанс: некоторые значения имеют min && max значение. MIN(), MAX(), денормализация Ex_Soft Опять же - каждому страховому продукту соответствует свой набор обЪектов и рискоф. И т.д. и т.п. И все это нужно учесть/проверить. BOL, видимо... :) Ex_SoftИ что же - прикажете при каждом submit'е при "игре" с параметрами в БД лазить? да Ex_SoftНе вопрос. Но только вот таких операторов ~1000-1500. по барабану. то же мне узкое место. Ex_SoftОпять же НСИ в БД слегка join'ов с ~5-6 нуна, что бы получить. детский сад Ex_SoftДа и блокировочник со всеми вытекающими. вытекающее без Кашпировского не рассосется Ex_SoftНу и, для начала, как все сие добро между postback'ами держать посоветуете? каждый постбэк - первый и последний. Ex_SoftНу и сохранить. По-людськи. INSERT, UPDATE, DELETE Ex_SoftС repeatable read'ом для документов, в случае модификаций. SET TRANSACTION ISOLATION LEVEL REPEATABLE READ Ex_Soft Не спорю: к dataset'у пришли от WinApp, в коем, в свое время, ваялсо обЪект, со всем функционалом. А тут - почти тот же функционал (даже больше). Предлагайте альтернативы - бум рассматривать и тянуцо к свету/знаниям/новым_веяниям руки выпрямляй ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 01:28 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
В опчем представил я себе оператора на какой-нить АЗС посреди поля между Хацапетовкой и Мухосранском на dial-up'е (даже не на 33.6 (я видел и 2.4)) - жаль мне его, и его спешащего клиента, возжелавшего при оказии по быстрячку зеленку купить, стало... _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 13:20 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы :) Но, во-первых: вы на некоем своём языке тут говорите, непонятно местами ) Во-вторых, уточню: если мне не нужно апдейтить те записи, которые я собираюсь показывать, тогда как? То есть вопрос о том, как часто и каким именно способом загружать измененные записи обратно в БД не стоит вообще. 1. Все только на просмотр (это не интерфейс для работы с БД, а внешний сайт). 2. Записи в БД (нашими операторами, изнутри) меняются так редко и неспешно, что этим можно пренебречь. Для редактирования они используют другой софт. То есть: не выгодно ли иметь некий слепок данных на стороне веб сервера и вот именно с ним и работать, заполняя его один раз - конечно при том условии, что параметры запроса не менялись. В какой-то момент, естественно, произойдет смена параметров - вот тогда то и полезем за новыми данными в БД. Для таких случаев и нужен датасет (System.Data.DataSet)? А вот вы тут про Linq говорили? Причем он тут? Это же сделано для унификации обращений к разным источникам данных, если не ошибаюсь (простите если глупость сказал). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 13:33 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
В какой-то момент, естественно, произойдет смена параметров - вот тогда то и полезем за новыми данными в БД. Для таких случаев и нужен датасет (System.Data.DataSet)? да, еще дополнение - почему, собственно, возник вопрос. вот я читаю, что работа в разъединенном окружении происходит быстрее, чем когда нужно каждый раз обращаться к БД. не могу понять: если я один раз за сесиию уже заполнил датасет (при первом обращении), то при повтором открытии той же, грубо говоря, страницы система опять полезет в БД и заполнит датасет? или она сама поймет, что он уже заполнен? то есть: можно (и нужно) ли как-то руками определить - заполнен датасет уже или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 14:16 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
Если sheich 1. Все только на просмотр и без сортировок, paging'ов - то тогда, действительно, Вам DataSet'ы не нужны. Просто один раз в OnPageLoad заполните в !IsPostBack все. sheich как-то руками определить - заполнен датасет уже или нет Как вариант Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 14:33 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
Ex_SoftЕсли без сортировок, paging'ов - то тогда, действительно, Вам DataSet'ы не нужны Вообще, будет и разбивка на страницы и сортировка. Но это я так думаю лучше делать на стороне SQL сервера и я знаю, как, и работает это достаточно быстро и надежно. Нет смысла выбирать много сотен записей из базы и тащить их на веб сервер, имхо, какой тут выиграыш?! Просто, в случае refresh страницы, когда по каким либо причинам сами данные не меняются, но должны при этом измениться другие части страницы я не хотел бы опять выполнять обращение к БД. Ваш пример именно так и будет работать? Если заранее создать датасет (в отдельном файле проекта, ну этот, с XML-описанием в .xsd) и там задать раз и навсегда жесткую структуру полей - его заполнение будет происходить без лишних тормозов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 14:46 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
sheich Нет смысла выбирать много сотен записей из базы и тащить их на веб сервер абсолютно http://ibase.ru/devinfo/dontdoit.htm]правильно[/quot] (п.2) ;) sheich Просто, в случае refresh страницы, когда по каким либо причинам сами данные не меняются, но должны при этом измениться другие части страницы я не хотел бы опять выполнять обращение к БД. А у Вас обращение к БД тока в трех местах будет: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 15:04 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
Ex_SoftА у Вас обращение к БД тока в трех местах будет: ага.. то есть я таки буду использовать датасет? и, если обращения к БД не произошло, то в датасете останутся старые данные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 15:17 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
sheich то есть я таки буду использовать датасет? нЭт - в этих трех местах вы лезете на БД и получаете то, что Вам нуна... _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 15:29 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
Ex_SoftнЭт - в этих трех местах вы лезете на БД и получаете то, что Вам нуна... так тогда в остальных случаях у меня не будет данных на странице вообще?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 15:39 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
Ex_Soft В опчем представил я себе оператора на какой-нить АЗС посреди поля между Хацапетовкой и Мухосранском на dial-up'е (даже не на 33.6 (я видел и 2.4)) и что беспокоит его диалупу? вьюстейты? отключите вьюстейты. sheichТо есть: не выгодно ли иметь некий слепок данных на стороне веб сервера и вот именно с ним и работать, заполняя его один раз - конечно при том условии, что параметры запроса не менялись. если данные зависят от параметров запроса - скорее всего нет, определяется только опытным путем на живых юзерах и данных. программисту однозначно не выгодно. поэтому сначала настругай тормозных запросов, а потом уже пляши с бубном. начни с @OutputCache. sheichДля таких случаев и нужен датасет (System.Data.DataSet)? хз. в датасет можно закачать небольшую БД и послать в Мухосранск в виде хмл. Ex_Softа спрашивай ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 15:40 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
пыхпоэтому сначала настругай тормозных запросов, а потом уже пляши с бубном. начни с @OutputCache. как работает кэширование я уже понял. я могу инклюдить таблицу с данными на страницу в виде отдельного контрола и навесить @OutputCache только на этот контрол - он будет апдейтиться только при изменении параметров запроса, касающихся только данных именно из этой таблицы. так? пыхв датасет можно закачать небольшую БД что можно закачать - это понятно! вопрос в том, как его там сохранить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 15:48 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
пых и что беспокоит его диалупу? побежняки на сервер за каждым пуком причем не только к IIS, но и к БД пых Ex_Soft И что же - прикажете при каждом submit'е при "игре" с параметрами в БД лазить? да sheich Для таких случаев и нужен датасет (System.Data.DataSet)? Код: plaintext 1. 2. 3. 4. 5. 6. 7. _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 16:07 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
Ex_Softasp:GridView ID="GridView1" AllowPaging="True" нет, я так не могу. мне нужно, что бы при смене страницы, сортировке происходила смена URL то есть каждой уникальной странице должен соответствовать уникальный URL то есть да, руками буду делать сортировку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 16:17 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
sheichя могу инклюдить таблицу с данными на страницу в виде отдельного контрола и навесить @OutputCache только на этот контрол - он будет апдейтиться только при изменении параметров запроса, касающихся только данных именно из этой таблицы. так? да sheichчто можно закачать - это понятно! вопрос в том, как его там сохранить? как сохранить сам датасет? Application["MyFuckingDataSet"] = dset или Cache.Insert(...). только не в сессии. Ex_Softпобежняки на сервер за каждым пуком причем не только к IIS, но и к БД Ex_Soft, ты вообще фкурсе как работает тырнет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 16:23 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
пых Application["MyFuckingDataSet"] = dset или Cache.Insert(...) Угу... А потом вот юзвера удивляцо будут, что получают данные соседа ;) пых фкурсе как работает тырнет? фкурсе, фкурсе... ;) _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 16:57 |
|
||
|
Вручную заполнить Typed DataSet один раз на всю сессию
|
|||
|---|---|---|---|
|
#18+
Ex_Soft Угу... А потом вот юзвера удивляцо будут, что получают данные соседа ;) удивляться будешь ты, когда умножишь вес датасета на количество сессий, которые один Вася Пупкин сможет нагенерить за пару минут. нет такого параметра в запросе естессно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 17:31 |
|
||
|
|

start [/forum/topic.php?all=1&fid=17&tid=1352410]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 378ms |

| 0 / 0 |
