|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosbeg-in-er, ну я и говорю что говно, а при больших данных воще не пашет а про Лист Сева наврал все промежуточные расчет надо зафиксировать ViPros, я не мсу. ToList перед Select это всего навсего: - создание, выделение памяти под List - совершенно лишний проход всего списка, тк последующий select делает тоже самое - создание экземпляра класса с выделением памяти и добавление его в список, а это влечет большие мультики с расширением границ массива. Если еще стоит where то разница будет весьма существенна. Сделай простую проверку и сравни по быстродействию и памяти два варианта var list = Enumerable.Range(1, 1000000).ToList(); var res = list.First(); и var res = var list = Enumerable.Range(1, 1000000); var res = list.First(); После этого поэкспериментируй с where и другими операторами. Сразу почувствуешь разницу, тк во втором случае не происходит создания всего списка в 1000К, а после отложенного выполнения делается только один проход и сразу дается результат ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 22:45 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVa, насчет отложенного я все понял, не зря читал про енумератор и yield ж я говорю, что если во вложенном вопросе будет var, ienumerable и т.д., типа a.where(n => b.select(i=> b.id).contains(a.id)) то для Каждого элемента из а будет срабатывать b.select(i=> b.id) а если сделать a r = b.select(i=> b.id).ToList(), то b.select(i=> b.id) будет один раз это вдно прямо в дебагере и по скорости обработки ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 22:55 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord BritishViPRos, Просто, у linq своя ниша. Какая у вас СУБД? А что вы делаете с графом? В Oracle есть часть в Oracle Spatial, называется Network Data Model, PL/SQL и Java API для обработки данных. Там есть всякие реализованные алгоритмы типа поиск минимального пути на основе весов ребер/вершин и т. п.. Чем примечательно Java API, для него можно в СУБД после заливки сети создать разбиение всего графа на куски (хранятся в lob'ах) и это Java API походу работы алгоритма подгружает прозрачн для программиста только необходимые куски за один присест (в случае есл разбиение было создано). Может посмотреть в сторону такого направления? граф у меня гипер (каждый узел является графом) СУБД МССКЛ самая большая моя проблема - запись в БД допустим на обработку (сложный алгоритм создание) графа до 1000 000 узлов на обычном десктопе приходится 1 минута, а запись в БД занимает на порядок больше времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:03 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosSeVa, насчет отложенного я все понял, не зря читал про енумератор и yield ж я говорю, что если во вложенном вопросе будет var, ienumerable и т.д., типа a.where(n => b.select(i=> b.id).contains(a.id)) то для Каждого элемента из а будет срабатывать b.select(i=> b.id) а если сделать a r = b.select(i=> b.id).ToList(), то b.select(i=> b.id) будет один раз это вдно прямо в дебагере и по скорости обработки если нужны несколько проходов, то есть специально обученные техники для этого. ЗЫ Сдается мне, что a.where(n => b.select(i=> b.id).contains(a.id)) можно заменить на простой join ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:04 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVa, т.е все как было так и есть скорость достигается за счет памяти ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:04 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosSeVa, т.е все как было так и есть скорость достигается за счет памяти Естественно, для net - минимизация выделения памяти - первое, что нужно делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:06 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVa, ну если хорошо владеть и изначально настроится на линк, наверное можно добиться результата, применяя то что надо, там где надо ну я тут решил просто выделить терминальные узлы графа одним махом - не вышло:( ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:07 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
зы если у тебя большие массивы данных, то посмотри PLINQ. В некоторых моментах можно существенно поднять быстродействие за счет распараллеливания. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:07 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVa, я пробовал в одном месте (когда перебираю альтернтивные процессоы для процесса), там Parallel дал выигрыш и то махался пока нашел, что количество потоков должно быть = количеству ядер +- 2, а не то (особенно если больше) полный застой ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:10 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
у меня громадные массивы сотни гигабайт для завода генерится при расчете портфеля :( ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:11 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRos, А как вы пишите в базу новый созданный граф? insert commit; insert commit; insert commit; или insert insert insert commit; ? Посмотрите в сторону средств СУБД, которые минуют все абстракции СУБД и льют все напрямую. Я увы не знаю MS SQL, конкретики не будет :(. В Oracle, как вариант, скидывать в csv ваш граф и грузить с помощью низкоуровневого sqlldr, скормив ему csv (у него есть масса настроек). Также есть API, которое можно пользовать из своего ПО, его sqlldr использует. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:23 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
+ можно рассмотреть также применимость nologging, опции параллельной заливки (чтобы redo на инсертах не генерилось). и еще посмотреть что с I/O data-файлов и т. д.. --- наверняка аналогичное низкоуровневое и т. п. есть у ms sql. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:27 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord British, есть несколько вариантов записи 1. BulkCopy 2. Пользовательский тип 3. Просто Insert batchsize можно менять как угодно во всех случаях счас самым удачным является 2 ну тут дело в том что эти данные тут же должны быть доступны для обработки это запись-чтение тут же по хорошему воще должна быть запись одиночка (это воще убивает СКЛ сервер) (ну типа заблокировал процессорпроцесса на какой то отрезок и эта инфа сразу должна быть доступна другим потокам - возможо на другом компе запущенным) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:29 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosу меня громадные массивы сотни гигабайт для завода генерится при расчете портфеля :( Тогда тебе нужны спецтехники для борьбы с ними. Опиши, что нужно ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:30 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosLord British, есть несколько вариантов записи 1. BulkCopy 2. Пользовательский тип 3. Просто Insert batchsize можно менять как угодно во всех случаях счас самым удачным является 2 ну тут дело в том что эти данные тут же должны быть доступны для обработки это запись-чтение тут же по хорошему воще должна быть запись одиночка (это воще убивает СКЛ сервер) (ну типа заблокировал процессорпроцесса на какой то отрезок и эта инфа сразу должна быть доступна другим потокам - возможо на другом компе запущенным) Для цепочек параллельных вычислений сейчас появилась весьма интересная штучка - dataflow ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:32 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVa, ну купили какой то кластер - 64 ядра, терабайты памяти и т.д. счас мне выделили 12 ядер и собственный рейд дисковая очередь упала до 5 :):):) (на десктопе 50) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:32 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVa, а параллелитьособо нечегона графе смотри - граф, это техпроцессы, узел графа (тоже граф) граф работы процессоров (людей машин интсрумента,..) так как процессоов мало и они могут передвигаться по узлам графа (собственный граф разрешенных путей с весами) параллелить нечего, нет разбиений (если токо вручную через полтитки перемещений разбить, но это возможно когда 10 -15 мобильных процессоов, а на заводе их тыщами) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:35 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRos(ну типа заблокировал процессорпроцесса на какой то отрезок и эта инфа сразу должна быть доступна другим потокам - возможо на другом компе запущенным) Посмотри streaminsight ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:36 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ой, пардон "...(чтобы redo на инсертах не генерилось)..." относилось к "... также применимость nologging ..." также можно псмотреть вариант сперенаправлением ввода вывода (sqlldr выполнена как все правильные unix style command) чтобы предварительно в csv не писать и если голое api не хочется колупать. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:36 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVa, про какой то dryad читал, но нет там демо и кажется сиильно платный почитал erlang - замахаешься кониги делать wcf лучше подходит кажется ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:37 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord British, все что может не писать в лог изучил и применил, толку маловато ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:38 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosLord British, все что может не писать в лог изучил и применил, толку маловато Вам нужен хороший DBA по MS SQL, нужно делать трассировки и смотреть где узкие места, а так пальцем в небо тыкать - дело удачи. PS. Дело в том, что, например приминительно к Oracle заливка сотни гигов вполне себе нормально переваривается через sqlldr. Шуршит только пятки сверкают :). ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:44 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosSeVa, про какой то dryad читал, но нет там демо и кажется сиильно платный почитал erlang - замахаешься кониги делать wcf лучше подходит кажется да, dryad платный, бета и на него уже забили. будет haloop. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:47 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVaViPRos(ну типа заблокировал процессорпроцесса на какой то отрезок и эта инфа сразу должна быть доступна другим потокам - возможо на другом компе запущенным) Посмотри streaminsight посмотрел, это наверное хорошо для мониторинга (асутп и тд.), а для планирования врядь ли ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:48 |
|
|
start [/forum/topic.php?fid=20&msg=38135550&tid=1404072]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
76ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 195ms |
0 / 0 |