Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Pagination: Как MS себе ее представляет
|
|||
|---|---|---|---|
|
#18+
Все что мне нужно — постранично отображать данные 1 таблицы в GridView. Казалось бы что еще проще? Выбрали 100 записей, показали, перешли по ссылке "2", выбрали следующие 100 и т д. Но ведь ничего подобного! GridView с его "встроенной поддержкой постраничного отображения данных" решил все за меня — сначала я должен выбрать миллион записей, показать из них первые 100, потом выбрать еще миллион, показать следующие 100. Но ведь вроде делают люди приложения?! Неужели все руками? Ну зачем же тогда было городить сотню контролов которые все равно никто не использует не иначе как для хомяков? Почему нельзя было просто дать НОРМАЛЬНЫЙ ШАБЛОНИЗАТОР, такой как в Ruby On Rails в конце концов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2006, 19:49 |
|
||
|
Pagination: Как MS себе ее представляет
|
|||
|---|---|---|---|
|
#18+
незнаю конкретно чем ты недоволен... ;) вероятно тем пейджингом, который существует в DG (DW)... так вот: лично я тут тоже участвовал в пару темах по этому вопросу - собственный пейджинг and etc. попробовал запустить на локале - встроенный пейджинг работал на 1000000 записей с выборкой в 50 строк на страницу - одна секунда +- доли... подумалось - а так ли это важно для нет - когда ответа сервера на любую др. страницу можно ждать по 5-7 сек. сделал вывод - можно пользоваться встроенным пейджингом и не стрессовать ;) P.S. наверное я хомяк ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2006, 21:13 |
|
||
|
Pagination: Как MS себе ее представляет
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, <Аноним>, Вы писали: А>Все что мне нужно — постранично отображать данные 1 таблицы в GridView. А>Казалось бы что еще проще? Выбрали 100 записей, показали, перешли по ссылке "2", выбрали следующие 100 и т д. Но ведь ничего подобного! Можно пояснить для тех, кто в танке А> GridView с его "встроенной поддержкой постраничного отображения данных" решил все за меня — сначала я должен выбрать миллион записей, показать из них первые 100, потом выбрать еще миллион, показать следующие 100. Не подскажешь, где такую траву берешь :))) А>Ну зачем же тогда было городить сотню контролов которые все равно никто не использует не иначе как для хомяков? Почему нельзя было просто дать НОРМАЛЬНЫЙ ШАБЛОНИЗАТОР, такой как в Ruby On Rails в конце концов.... << RSDN@Home 1.2.0 alpha rev. 668>> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2006, 23:38 |
|
||
|
Pagination: Как MS себе ее представляет
|
|||
|---|---|---|---|
|
#18+
rameel Аноним А> GridView с его "встроенной поддержкой постраничного отображения данных" решил все за меня — сначала я должен выбрать миллион записей, показать из них первые 100, потом выбрать еще миллион, показать следующие 100. Не подскажешь, где такую траву берешь А вы считаете, что это как то по другому работает? Может объясните тогда как? А то все про траву, да про траву. Давайте уж и по ASP.NET немного поговорим, по делу так сказать :-). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2006, 23:57 |
|
||
|
Pagination: Как MS себе ее представляет
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, calbears, Вы писали: C>Не подскажешь, где такую траву берешь C>А вы считаете, что это как то по другому работает? Может объясните тогда как? А то все про траву, да про траву. Давайте уж и по ASP.NET немного поговорим, по делу так сказать :-). Вот вот. Курил курил маны по этому делу, вычитал, что можно создать ObjectDataSource и там указать метод который возвращает кол-во записей в таблице (если правильно понял, так как не проверял еще). Однако нет же счастия — там тоже за меня определено: "у класса который дергает базу должен быть конструктор без параметров". А если у меня весь слой доступа к данным не подразумевает подобного? У меня строка соединения к примеру передается как 1 из параметров конструктора. Ну да фиг с ним с конструктором я согласен сделать свойство которое устанавливает connectionString. В "декларативном подходе ASP.NET увы не предусмотрели возможность установки параметра для своего класса" ЗЫ: Если бы Ruby On Rails предусмотрели работу с хранимыми процедурами, да еще и с такими, которые возвращают 2 result set'a цены бы не было честное слово. Just For Fun'ы даже работу с AJAX сделали прозрачнее, легче, красивее в конце концов чем миллиардная контора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2006, 00:14 |
|
||
|
Pagination: Как MS себе ее представляет
|
|||
|---|---|---|---|
|
#18+
Как минимум, несколько соображений: - при попытках подключиться через левые дрова/к левым базам упомянутый грид может выдать что-то вроде Data source doesn't support paging (дословно не помню, но что-то близкое). Значит, все-таки используется нечто на уровне БД, а не на уровне прослойки .NET. - стандартный дизайн-паттерн для пейджинга выглядит так: получаем ПОЛНЫЙ список первичных ключей (миллион записей - значит миллион, и т.д.), либо, как минимум, TOP {N} (в синтаксисе MSSQL), после чего шлем второй запрос, уже с полным списком полей и условием WHERE ID IN (фрагмент, выкушенный из первого запроса). Я не думаю, что MS изобретала велосипед - в ORACLE, действительно, можно исхитриться через использование ROWNUM (WHERE ROWNUM>[начало страницы] AND ROWNUM<[конец страницы]), но в MSSQL, насколько мне помнится, аналогов нет - разве только организовывать хранимые процедуры с глупыми счетчиками. Вы уверены, что это будет быстрее? - данные из запроса по-умолчанию кэшируются, причем никто точно не знает, на уровне конкретной сессии или на уровне всего Application (или это где-то написано?) А значит, еще не факт, что для большого сервера, к которому одновременно обращается, скажем, 1000 пользователей, пытающихся получить разные страницы одного и того же запроса, вариант, когда данные всеми отбираются из единожды полученного и кэшированного датасета, так уж плох. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2006, 10:31 |
|
||
|
Pagination: Как MS себе ее представляет
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Аноним, Вы писали: А>Все что мне нужно — постранично отображать данные 1 таблицы в GridView. А>Казалось бы что еще проще? Выбрали 100 записей, показали, перешли по ссылке "2", выбрали следующие 100 и т д. Но ведь ничего подобного! GridView с его "встроенной поддержкой постраничного отображения данных" решил все за меня — сначала я должен выбрать миллион записей, показать из них первые 100, потом выбрать еще миллион, показать следующие 100. А>Но ведь вроде делают люди приложения?! Неужели все руками? Ну зачем же тогда было городить сотню контролов которые все равно никто не использует не иначе как для хомяков? Почему нельзя было просто дать НОРМАЛЬНЫЙ ШАБЛОНИЗАТОР, такой как в Ruby On Rails в конце концов. Вам надо просто прочитать серию статей на www.asp.net: 1. Как тупо сделать пейджинг: http://www.asp.net/learn/dataaccess/tutorial24cs.aspx?tabid=63 2. Как правильно сделать его: http://www.asp.net/learn/dataaccess/tutorial25cs.aspx?tabid=63 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2006, 12:53 |
|
||
|
Pagination: Как MS себе ее представляет
|
|||
|---|---|---|---|
|
#18+
То, что описано в п.2 - фактически аналог того, что я написал про Oracle (Microsoft опять, кхммм... позаимствовала чужое удачное решение - оракла, я имею в виду:) ). Проблема в том, что это не отработает ни на MSSQL2000 (не говоря про Access), ни на куче других баз типа MySQL/firebird, буде таковые придет в голову использовать. Соответственно, было бы категорически неправильно требовать от СТАНДАРТНОГО УНИВЕРСАЛЬНОГО компонента использовать подход, работающий аж с двумя типами БД - Oracle/MSSQL2005. Кроме того, приведенное "правильное" решение будет работать еще и ровно с одной сортировкой, что и вовсе глупость. А "еще более правильное" решение - подразумевает не хранимую процедуру, а динамическую компоновку запроса с приписыванием условия отбора по ROW_NUMBER. В общем, GridView - вполне удовлетворительная реализация для 99% не слишком серьезных проектов, на которые дотнет и нацелен (посмотрите любой торговый сайт - где там миллион позиций?:) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2006, 13:34 |
|
||
|
Pagination: Как MS себе ее представляет
|
|||
|---|---|---|---|
|
#18+
Мелкомягкие предоставляют средства для решения типовых задач, но никак не ограничивают кого бы то ни было в реализации любых других алгоритмов. Если хочется быстрый (и правильный) пейджинг - курим ObjectDataSource и все дела. Новое в ASP.NET 2. Контролы DataSource. Часть 2 - ObjectDataSource Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2006, 14:09 |
|
||
|
Pagination: Как MS себе ее представляет
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, calbears, Вы писали: C>А вы считаете, что это как то по другому работает? Может объясните тогда как? Ну во-первых, GridView — это всего лишь презентационный слой, отображающий переданные ему данные. За выборку, извлечение и фильтрацию данных из базы (будь то субд, dataset или что-то другое) это вообще-то не в его компетенции. Если ты не удосуживаешься ограничить выборку из базы и передаешь ему каждый раз все свои 1000000 записей, то кого в этом винить как не самого себя :xz: Ну а то, что в наличии, точнее сказать, в реализации GridView стало возможным из переданных ему данных делать еще и разбивку по страницам — так это, ИМХО, бонус. А>GridView с его "встроенной поддержкой постраничного отображения данных" решил все за меня — сначала я должен выбрать миллион записей , показать из них первые 100, потом выбрать еще миллион, показать следующие 100. Я вот не понимаю, зачем извлекать все записи :???: Воспользуйся одним из стандартных средств (SqlDataSource или ObjectDataSource), и все необходимые параметры от сортировки до на начала и количества затребованных данных тебе будет доступно. Вот и пользуйся ими. Прошу меня извинить, если обидел :)... << RSDN@Home 1.2.0 alpha rev. 668>> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2006, 15:57 |
|
||
|
Pagination: Как MS себе ее представляет
|
|||
|---|---|---|---|
|
#18+
Надо б было, конечно, MS сделать нормальный пейджер, который бы нормально лепился к DataList и GridView. А то какой контрол не тронь - получается только для хомяков... А делать SqlDataSource с СОБСТВЕННЫМИ параметрыми это и называется - весь пейджинг делать руками. Я присоединяюсь к vladgrig в том плане, пока из данных идет текст - вообще не стоит думать об этом - расходы на передачу данных с SQL просто ничтожные. Тысячные и сотые доли секунды даже на десятках тысячах записей. Другое дело - когда из базы поднимаются рисунки. Тогда все это действительно весьма накладно и без собственного пейджинга не обойтись. И ведь проблемы ASP2 - они вообще-то не в этих тысячных долях секунды на сервере, а в непомерной тяжести страничек (по крайней мере на стандартных контролах) при перегрузке их на клиента. А здесь пейджинг хоть как делай, он это время не сократит. Но для КАЧЕСТВЕННЫХ сайтов, быстрых и с огромным обьемом данных, конечно встроенный пейджинг, даже без рисунков - это сплошные тормоза на сервере. Кстати существенно их уменьшить можно переведя базу в режим "только чтение". Это невелирует идиотский микрософтовский пейджинг. А оценить обьем данных, передаваемых процедурой, можно нажав кнопку ClientStatistic. Без рисунков он большим не будет никак. Я вот, например, сейчас избежал ковыряния в собственном пейджере, просто отказавшись от Джоина рисунков прямо на SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 02:16 |
|
||
|
Pagination: Как MS себе ее представляет
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, vbnet2000, Вы писали: V>Я присоединяюсь к vladgrig в том плане, пока из данных идет текст — вообще не стоит думать об этом — расходы на передачу данных с SQL просто ничтожные. Тысячные и сотые доли секунды даже на десятках тысячах записей. Другое дело — когда из базы поднимаются рисунки. Тогда все это действительно весьма накладно и без собственного пейджинга не обойтись. не могли бы вы поделится куском кода в котором вы извлекаете рисунки и отображаете в гриде?... << RSDN@Home 1.1.4 stable SR1 rev. 568>> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 09:36 |
|
||
|
Pagination: Как MS себе ее представляет
|
|||
|---|---|---|---|
|
#18+
Код: plaintext Если из SQL на Web-сервер поднимается скажем килобайт 100, даже до полмегабайта - вообще нет смысла заморачиваться на собственном пейджинге, ведь тормоза ASP2 происходят на этапе когда вот такая мурня ASP2<td><a href="#ctl00_P1_FN1_M1_SkipLink"><img alt="Skip Navigation Links" src="/SH/WebResource.axd?d=iLMMPkjLP0w3d9N04hK9Gw2&t=632988584718281250" width="0" height="0" style="border-width:0px;" /></a><table id="ctl00_P1_FN1_M1" title="Выберите раздел форума" class="ctl00_P1_FN1_M1_2" cellpadding="0" cellspacing="0" border="0"> <tr onmouseover="Menu_HoverRoot(this)" onmouseout="Menu_Unhover(this)" onkeyup="Menu_Key(this)" id="ctl00_P1_FN1_M1n0">идет на клиента, вместо скажем нормального html-кода PHP<td><a href="1.htm"><img src="1.gif"" /></a><table title="Выберите раздел форума" cellpadding="0" cellspacing="0" border="0"> Кроме того, все чем, занимаются PHP, Perl и прочие программисты - они выковыривают из HTML пробелы, табуляции, переводы строки, с окщают идентификаторы и прочее. А здесь вместо <IMG SRC="1.GIF"> по <img src="/SH/WebResource.axd?d=iLMMPkjLP0w3d9N04hK9Gw2&t=632988584718281250> вытаскивается скрипт такой охренительной длины , что браузер на клиенте выпадает в полный аут на несколько секунд (или даже минут, если например вас угораздило применить TreeView, XmlDataSource или прочие чудо-контролы из ASP2). И это даже при отключонном ViewState! Поэтому они и не стали тут делать нормального пейджинга, ибо не в нем проблемы. Если конечно с SQL на Web-сервер передается мегабайт 50 - тогда конечно, он нужен, а на копейках до одного мегабайта - тормоза ASP2 совсем на другом этапе - линия передачи и захлебывающийся на клиенте браузер... Поэтому лично я поднимаю из SQL только идентификаторы... Для подъема же собственно рисунков из SQL (который цепляется в RowDataBound) я использую вот такой свой контрол - Код: 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. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. Что касается привязки этого к DataGrid или DataList - тут можно по разному, Там есть DataKey - в котором есть ключ, по которому можно вытащить рисунок. Второй способ, который я применяю - это хранение в кеше DataSeta (ну если Web-сервер достаточно памяти имеет) - в этом случае я применяю контрол ImageFromDS Код: 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. Ну и третий способ - я вообще-то делаю все время бизнес-объекты - как WorkNodes здесь . Ну а рисунки - динамически догружаются в них по требованию (ну это тот же КЭШ по идее, только с собственно политикой кеширования). Но в таблы, DataList и пр. - опять же выводить по минимуму - идентификаторы и названия - так очень трудно набрать даже мегабайт данных от SQL к Web-серверу, а тогда глюки микрософтовского пейджинга уходят совсем на второй план относительно глюков неоптимально создаваемого HTML-кода и торможения кода в браузере, а не на Web-сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 13:09 |
|
||
|
Pagination: Как MS себе ее представляет
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, vbnet2000, Вы писали: V> PHP<td><a href="1.htm"><img src="1.gif"" /></a><table title="Выберите раздел форума" cellpadding="0" cellspacing="0" border="0"> V>Кроме того, все чем, занимаются PHP, Perl и прочие программисты — они выковыривают из HTML пробелы, табуляции, переводы строки, с V>окщают идентификаторы и прочее. А здесь вместо <IMG SRC="1.GIF"> по <img src="/SH/WebResource.axd?d=iLMMPkjLP0w3d9N04hK9Gw2&t=632988584718281250> V>вытаскивается скрипт такой охренительной длины, что браузер на клиенте выпадает в полный аут на несколько секунд V>(или даже минут, если например вас угораздило применить TreeView, XmlDataSource или прочие чудо-контролы из ASP2). V>И это даже при отключонном ViewState! Поэтому они и не стали тут делать нормального пейджинга, ибо не в нем проблемы. ИМНО, ты путаешь теплое и мягкое, какое отношение /SH/WebResource.axd имеет к paging? :???: V>Если конечно с SQL на Web-сервер передается мегабайт 50 — тогда конечно, он нужен, а на копейках до одного мегабайта — V>тормоза ASP2 совсем на другом этапе — линия передачи и захлебывающийся на клиенте браузер... V>Поэтому лично я поднимаю из SQL только идентификаторы... Для подъема же собственно рисунков из SQL (который цепляется в RowDataBound) V>я использую вот такой свой контрол — я делаю подобным способом, думал может что изобрели нового :)... << RSDN@Home 1.1.4 stable SR1 rev. 568>> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 13:52 |
|
||
|
Pagination: Как MS себе ее представляет
|
|||
|---|---|---|---|
|
#18+
а... ну пардон, я ж не знал... ну может кому полезно будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 14:14 |
|
||
|
Pagination: Как MS себе ее представляет
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, vbnet2000, Вы писали: V>Я присоединяюсь к vladgrig в том плане, пока из данных идет текст — вообще не стоит думать об этом — расходы на передачу данных с SQL просто ничтожные. Тысячные и сотые доли секунды даже на десятках тысячах записей. Другое дело — когда из базы поднимаются рисунки. Тогда все это действительно весьма накладно и без собственного пейджинга не обойтись. А если данные передаются по сети? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 14:32 |
|
||
|
Pagination: Как MS себе ее представляет
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, vbnet2000, Вы писали: V>Поэтому лично я поднимаю из SQL только идентификаторы... Для подъема же собственно рисунков из SQL (который цепляется в RowDataBound) V>я использую вот такой свой контрол — <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Image.aspx.vb" Inherits="Control_Image" %> Я бы не советовал использовать в данном случае использовать обычную страницу, для этого у него несколько длинный цикл обработки. Легковесней здесь использовать .ashx... << RSDN@Home 1.2.0 alpha rev. 668>> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 14:44 |
|
||
|
Pagination: Как MS себе ее представляет
|
|||
|---|---|---|---|
|
#18+
авторА если данные передаются по сети?Ну я в принципе пробовал - для себя сделал вывод - если из SQL поднимается до мегабайта - то этим торможением можно просто пренебречь относительно торможения в браузере (особенно если там скрипты еще более тормозные, чем просто от ASP2 - например от Атласа). Что касается ASHX - да это более эффективно, но и более гиморойно. И опять же - я вот не вижу проблем избыточной загрузки сервера (ну может сервер у меня мощный - 8ГБ памяти и загрузка небольшая) - в моих условиях это не тот момент, где стоит заморачиваться - все проблемы что я наблюдаю - это тяжеловесность страничек ASP2, коллосальное время, необходимое на их пережевывание браузером... Хотя в целом, для супер нагруженных сайтов и относительно слабых серверов, наверное стоит этим заморачиваться.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 15:03 |
|
||
|
Pagination: Как MS себе ее представляет
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, rameel, Вы писали: R>Я бы не советовал использовать в данном случае использовать обычную страницу, для этого у него несколько длинный цикл обработки. Легковесней здесь использовать .ashx А что используем в качестве шаблонизатора? Я тоже решил давно отказаться от серверных форм ASPX. Но что юзать как Template Engine? Писать свой? Пишу вот юзаю IronPython но вот что-то у меня опыта маловато в этом деле получается не красиво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 15:16 |
|
||
|
Pagination: Как MS себе ее представляет
|
|||
|---|---|---|---|
|
#18+
АнонимЗдравствуйте, vbnet2000, Вы писали: V>Я присоединяюсь к vladgrig в том плане, пока из данных идет текст — вообще не стоит думать об этом — расходы на передачу данных с SQL просто ничтожные. Тысячные и сотые доли секунды даже на десятках тысячах записей. Другое дело — когда из базы поднимаются рисунки. Тогда все это действительно весьма накладно и без собственного пейджинга не обойтись. А если данные передаются по сети? А причем тут рисунки?! Рисунки - это блобы, от которых в датасете передается только 16-байтный (кажется) дескриптор. А сам рисунок тянется сознательно, и только КОГДА НУЖЕН. Соответственно, все "ненужные" записи пробегаются курсором, и блобы из них не высасываются. Так о чем разговор? А что касается нагрузки на сервер... Вы не задумывались, что для того, чтобы выбрать 20 записей из СОРТИРОВАННОГО миллиона, сервер сначала должен-таки этот запрос исполнить целиком (т.е. получить миллион записей и отсортировать их), чтобы потом уже отдать наружу небольшой его кусок? Конечно, оптимизаторы творят чудеса, но не в подобных случаях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 22:48 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=34174936&tid=1387002]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
64ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 429ms |

| 0 / 0 |
