|
|
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Antoshka харош бездумно копипастить, ты не ответил на главный вопрос - какого фига не используется виртуальная память? и, да, что делать если у меня x64? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2009, 12:27 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
зыAntoshka харош бездумно копипастить, ты не ответил на главный вопрос - какого фига не используется виртуальная память? и, да, что делать если у меня x64? :) Ты хоть читаешь, то что пишут? Если у тебя x64, то всё будет ОК. А вот если на x86 у тебя будет 3 гБ пользовательских данных, то куда ты их уложишь, если у тебя всего порядка 2000 Мб адресного пространства. Даже если они будут лежать в свопе, то всё равно место в АП процесса они занимают. Чтобы обойти эту беду, необходимо организовать специальное окно в адресном пространстве процесса, в которое при необходимости маппить необходимые порции данных из файла подкачки. Кстати, примерно так работают с очень большими файлами: замаппили кусочек в память, обработали, отменили маппинг - перешли к следующему куску. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2009, 10:21 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Antoshka Ты хоть читаешь, то что пишут? Если у тебя x64, то всё будет ОК. твоя проблема в том, что как раз ты тут и не читаешь. Про архитектуру процессора никто даже не заикался, кроме тебя с твоим "Win32". дальше у тебя много слов опять не по теме, комментировать не буду. Повторю исходный вопрос - он был не в том, почему приложение не может воспользоваться более чем N гигабайтами оперативы, он был в том, почему .net не использует виртуальную память. Разницу способен понять? И ответ на этот вопрос лежит не в статьях про Win32, а в описании CLR и сборщика мусора и особенностях их работы. Иди читай, потом расскажешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2009, 12:30 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Так, вернёмся к истокам... ТрудностьВ_ADOДобрый день! И вопрос в догонку - почему с#, framework, ado.net не используют виртуальную память, а вылетают с исключением "Out of memory"? Может, настройка такая есть? Ты хочешь сказать, что дотнет получает память от операционной системы в обход стандратного WinAPI? Ты ошибаешься, он также точно где-то в своих дебрях вызовает VirtualAlloc, который имеет те же самые грабли с "Out of memory", о которых я рассказывал. Ниже приведена программа, которая легко это доказывает. Код: 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. Запусти, и увидишь, что далее двух шагов она не пройдёт, если, конечно процесс не x64 (в этом случае она будет продолжать работать до исчерпания ОЗУ и файла подкачки). Но, опять же, топикстартер не упомянул версию своей операционной системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2009, 14:20 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
не нужно показывать все данные сразу, пусть пользователь/автор программы конкретизирует выборку и на одну проблему меньше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2009, 15:45 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Antoshka Запусти, и увидишь, что далее двух шагов она не пройдёт, если, конечно процесс не x64 (в этом случае она будет продолжать работать до исчерпания ОЗУ и файла подкачки). Но, опять же, топикстартер не упомянул версию своей операционной системы. ололо, а у меня даже один шаг ниасилила, к чему бы это? винда 2008 x32, 2гб оперативы. давай усложним твой пример, ну так чтобы память реально выделялась и использовалась, а не просто резервировалась под возможные нужды. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2009, 04:17 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
зы ололо, а у меня даже один шаг ниасилила, к чему бы это? винда 2008 x32, 2гб оперативы. :) и ты тут ещё про своп рассуждаешь.. зы давай усложним твой пример, ну так чтобы память реально выделялась и использовалась, а не просто резервировалась под возможные нужды. Да будет тебе известно, что дотнет при выделении памяти усердно инициализирует её нулями. Так что нет никакой разницы между моим и твоим кодом за исключением размера блока. зы сиди и наблюдай в таскменеджере за процессом, потом расскажешь на скольки у тебя отвалилось и почему это оно так происходит. И, кстати, не забудь заодно поведать нам, какая у тебя ось и сколько памяти стоит. Результаты: 1) моя рабочая машина, Vista x64 2Gb - моя прога доходила до 4-5 и вываливалась, что соответствовало 4-5 Гб всей доступной памяти (ОЗУ+файл подкачки). Твоя прога честно дошла до 5334. Результат по объёму аналогичный; 2) тестовый сервер Win 2003 x86, 16 Gb, /PAE включен. Моя прога стабильно отваливалась после цифры 2, твоя - после 1725. Включи мозг и подумай, почему, при наличии дофига ОЗУ + хз сколько места в файле подкачки, больше двух гигов процесс сожрать не может? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2009, 08:27 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Случайно наткнулся на топик. Жестко Антошка упертого рогом в забор зы отодрал :) Про ваш спор - баян столетней давности про распределение памяти под своппинг, зы - двойка :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2009, 02:26 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
МСУ, тебя-то драли, дерут и драть будут, до сих пор иногда ржу над твоими перлами. Надолго разбанили-то? Antoshka, к сожалению, в разгар спора мне не хватило времени проверить один момент, поскольку я уехал на несколько недель, а потом забыл :( (МСУ может даже не пытаться глумиться что это типа отмазка, данный любитель некропостов может поискать мои сообщения за этот период - не найдет ни одного). момент заключался в том, чтобы уточнить, как это работало на старом .нет, поскольку не отрицаю что в новом они много чего улучшили, включая работу с памятью, а со времен 1.1 я помнил что на виртуальную память были ограничения. Общая суть такая, что своп и сборщик мусора плохо совместимы с собой, поскольку своппинг пытается засунуть неиспользуемые страницы на диск, а сборщик - найти среди неиспользуемых то, что можно выкинуть, поднимая тем самым страницы с диска обратно в память. Несмотря на то, что синтетические тесты показывают возможность выделения большого объема на 64-битной ОС, в реальности, если далеко выбраться за пределы доступной физической, реальное приложение начнет сильно тормозить себя и систему в целом. Хуже, если несколько .нет приложений работают на одном сервере (веб сервер, например), тогда у них начнется конкуренция за физическую память, что приведет к общей деградации производительности. Очевидно, что то, что я написал выше, справедливо для любых приложений - нет свободной памяти, система свопит и тормозит, но с .net этот эффект значительно хуже, потому что сборщик мусора не дает страницам долго покоиться на диске, в отличие от обычных приложений, которые можно надолго частично схоронить. авторДа будет тебе известно, что дотнет при выделении памяти усердно инициализирует её нулями. Так что нет никакой разницы между моим и твоим кодом за исключением размера блока. разница, как ни странно, есть, и её отчетливо видно в таскменеджере. Чтобы её объяснить - надо дальше углубляться в работу менеджера памяти, сейчас нет на это времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2009, 12:54 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Нет времени, работа, ... Зы, Вы похожи на нашкодившего первоклассника :) Да не расстраивайтесь так, все когда-то с чего-то начинали. У Вас еще всё впереди :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2009, 13:26 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
>ТрудностьВ_ADO, 30 апр 09, 18:30 [7135839] > ... При этом на 60 тыс. записей ... Здесь рассказано как строился прототип защищенных распределенных многоуровневых информационных систем. Задачу страничной подкачки также пришлось решать. Я сразу отбросил вариант закачки в кеш клиентского компьютера полной выборки запроса. Не реально это по медленным каналам. Жизнеспособна только страничная подкачка. Разные варианты реализации её приведены в статьях. На миллиарде записей не проверял. Но на 60 тыс. не должно быть существенной разницы во времени получения первой и последней страницы. С уважением, Владимир. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2009, 14:02 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
>ТрудностьВ_ADO, 30 апр 09, 18:30 [7135839] > ... При этом на 60 тыс. записей ... Здесь рассказано как строился прототип защищенных распределенных многоуровневых информационных систем. Задачу страничной подкачки также пришлось решать. Я сразу отбросил вариант закачки в кеш клиентского компьютера полной выборки запроса. Не реально это по медленным каналам. Жизнеспособна только страничная подкачка. Разные варианты реализации её приведены в статьях. На миллиарде записей не проверял. Но на 60 тыс. не должно быть существенной разницы во времени получения первой и последней страницы. С уважением, Владимир. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2009, 14:03 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
Можно использовать серверный курсор и датагрид в виртуальном режиме. У меня на 40 тыс записей открывает курсор около полусекунды, затем работает (скроллит) очень быстро. Так же реализовал сортировку, поиск и фильтрацию. Народ доволен. Память на клиенте практически не используется (полмегабайта - можно пренебречь). В памяти держится только то, что выведено на экране. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2009, 17:35 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
серверные курсоры обладают феноменально низкой производительностью, кроме того, не имеют должной поддержки со стороны ado.net. Наверное, ты все-таки хотел воспользоваться пейджингом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2009, 18:48 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
По поводу SQL Management Studio. Информирую. Студия использует диск для хранения прочитаных с сервера данных. Аналогичным образом делает старый добрый jet (движок Access), но он более интеллектуальный и поддерживает разные курсоры с разной функциональностью. Только студийный вариант свой и не поддерживает фильтров и сортировки. В памяти хранятся только указатели на смещение в этом файле кэша (я так думаю). Данные читаются только в одном направлении, пока не будет достигнута последняя запись. Скажем, нельзя быстро перейти в конец и листать в обратном направлении. Используется ADO.NET forward-only курсор (DataReader). С уважением, Павел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2009, 16:45 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
зы, Для отчитки по 100 строк для показа страниц на экране - самое то. У меня написан класс на iBindingList - все прекрасно вяжеться с гридом. Но есть несколько минусов: 1. Не сделать нормальный поиск - все равно придется все перебрать 2. Фильтрация и сортировка - только для запросов (select) для хранимок не получится (или нужно задавать жестко параметры для хранимок) Все это из-за того, что на скуле нет нормальных средств для выборки из запроса по принципу "с 100 записи выбрать 200 штук". Но для простых списков (например справочник товаров (>100 тыс), список накладных и т.п.) работает нормально, гораздо лучше, чем тянуть все в память ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2010, 20:07 |
|
||
|
ADO.Net и большие объемы данных
|
|||
|---|---|---|---|
|
#18+
krudensoft1. Не сделать нормальный поиск - все равно придется все перебрать Вы просто не умеете писать SQL-запросы или пользовать ORM. krudensoft2. Фильтрация и сортировка - только для запросов (select) для хранимок не получится (или нужно задавать жестко параметры для хранимок) Вы просто не умеете писать SQL-запросы или пользовать ORM. krudensoftВсе это из-за того, что на скуле нет нормальных средств для выборки из запроса по принципу "с 100 записи выбрать 200 штук". Вы просто не умеете писать SQL-запросы или пользовать ORM. krudensoftНо для простых списков (например справочник товаров (>100 тыс), список накладных и т.п.) работает нормально, гораздо лучше, чем тянуть все в память Вы просто не умеете писать SQL-запросы или пользовать ORM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2010, 20:36 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=36334112&tid=1351441]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
174ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 247ms |
| total: | 550ms |

| 0 / 0 |
