powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / на что хоть нарвался?
25 сообщений из 119, страница 2 из 5
на что хоть нарвался?
    #38135497
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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К, а после отложенного выполнения делается только один проход и сразу дается результат
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135503
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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) будет один раз
это вдно прямо в дебагере и по скорости обработки
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135508
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lord BritishViPRos,

Просто, у linq своя ниша.

Какая у вас СУБД?

А что вы делаете с графом? В Oracle есть часть в Oracle Spatial, называется Network Data Model, PL/SQL и Java API для обработки данных. Там есть всякие реализованные алгоритмы типа поиск минимального пути на основе весов ребер/вершин и т. п.. Чем примечательно Java API, для него можно в СУБД после заливки сети создать разбиение всего графа на куски (хранятся в lob'ах) и это Java API походу работы алгоритма подгружает прозрачн для программиста только необходимые куски за один присест (в случае есл разбиение было создано).

Может посмотреть в сторону такого направления?

граф у меня гипер (каждый узел является графом)
СУБД МССКЛ
самая большая моя проблема - запись в БД
допустим на обработку (сложный алгоритм создание) графа до 1000 000 узлов на обычном десктопе приходится 1 минута, а запись в БД занимает на порядок больше времени.
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135509
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135510
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,

т.е все как было так и есть
скорость достигается за счет памяти
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135512
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosSeVa,

т.е все как было так и есть
скорость достигается за счет памяти
Естественно, для net - минимизация выделения памяти - первое, что нужно делать.
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135513
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,

ну если хорошо владеть и изначально настроится на линк, наверное можно добиться результата, применяя то что надо, там где надо
ну я тут решил просто выделить терминальные узлы графа одним махом - не вышло:(
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135514
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы если у тебя большие массивы данных, то посмотри PLINQ. В некоторых моментах можно существенно поднять быстродействие за счет распараллеливания.
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135518
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,

я пробовал в одном месте (когда перебираю альтернтивные процессоы для процесса), там Parallel дал выигрыш и то махался пока нашел, что количество потоков должно быть = количеству ядер +- 2, а не то (особенно если больше) полный застой
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135520
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня громадные массивы
сотни гигабайт для завода генерится при расчете портфеля :(
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135529
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

А как вы пишите в базу новый созданный граф?

insert
commit;
insert
commit;
insert
commit;

или

insert
insert
insert
commit;
?

Посмотрите в сторону средств СУБД, которые минуют все абстракции СУБД и льют все напрямую. Я увы не знаю MS SQL, конкретики не будет :(.


В Oracle, как вариант, скидывать в csv ваш граф и грузить с помощью низкоуровневого sqlldr, скормив ему csv (у него есть масса настроек). Также есть API, которое можно пользовать из своего ПО, его sqlldr использует.
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135531
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ можно рассмотреть также применимость nologging, опции параллельной заливки (чтобы redo на инсертах не генерилось). и еще посмотреть что с I/O data-файлов и т. д..

---
наверняка аналогичное низкоуровневое и т. п. есть у ms sql.
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135534
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lord British,

есть несколько вариантов записи

1. BulkCopy
2. Пользовательский тип
3. Просто Insert
batchsize можно менять как угодно во всех случаях
счас самым удачным является 2

ну тут дело в том что эти данные тут же должны быть доступны для обработки
это запись-чтение тут же
по хорошему воще должна быть запись одиночка (это воще убивает СКЛ сервер)
(ну типа заблокировал процессорпроцесса на какой то отрезок и эта инфа сразу должна быть доступна другим потокам - возможо на другом компе запущенным)
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135535
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosу меня громадные массивы
сотни гигабайт для завода генерится при расчете портфеля :(

Тогда тебе нужны спецтехники для борьбы с ними. Опиши, что нужно
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135537
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosLord British,

есть несколько вариантов записи

1. BulkCopy
2. Пользовательский тип
3. Просто Insert
batchsize можно менять как угодно во всех случаях
счас самым удачным является 2

ну тут дело в том что эти данные тут же должны быть доступны для обработки
это запись-чтение тут же
по хорошему воще должна быть запись одиночка (это воще убивает СКЛ сервер)
(ну типа заблокировал процессорпроцесса на какой то отрезок и эта инфа сразу должна быть доступна другим потокам - возможо на другом компе запущенным)

Для цепочек параллельных вычислений сейчас появилась весьма интересная штучка - dataflow
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135538
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,

ну купили какой то кластер - 64 ядра, терабайты памяти и т.д.
счас мне выделили 12 ядер и собственный рейд
дисковая очередь упала до 5 :):):) (на десктопе 50)
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135540
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,

а параллелитьособо нечегона графе
смотри - граф, это техпроцессы, узел графа (тоже граф) граф работы процессоров (людей машин интсрумента,..)
так как процессоов мало и они могут передвигаться по узлам графа (собственный граф разрешенных путей с весами) параллелить нечего, нет разбиений (если токо вручную через полтитки перемещений разбить, но это возможно когда 10 -15 мобильных процессоов, а на заводе их тыщами)
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135542
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos(ну типа заблокировал процессорпроцесса на какой то отрезок и эта инфа сразу должна быть доступна другим потокам - возможо на другом компе запущенным)

Посмотри streaminsight
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135543
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой, пардон

"...(чтобы redo на инсертах не генерилось)..."

относилось к

"...
также применимость nologging
..."

также можно псмотреть вариант сперенаправлением ввода вывода (sqlldr выполнена как все правильные unix style command) чтобы предварительно в csv не писать и если голое api не хочется колупать. :)
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135544
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,

про какой то dryad читал, но нет там демо и кажется сиильно платный
почитал erlang - замахаешься кониги делать
wcf лучше подходит кажется
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135545
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lord British,

все что может не писать в лог изучил и применил, толку маловато
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135550
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosLord British,

все что может не писать в лог изучил и применил, толку маловато

Вам нужен хороший DBA по MS SQL, нужно делать трассировки и смотреть где узкие места, а так пальцем в небо тыкать - дело удачи.

PS. Дело в том, что, например приминительно к Oracle заливка сотни гигов вполне себе нормально переваривается через sqlldr. Шуршит только пятки сверкают :).
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135551
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosSeVa,

про какой то dryad читал, но нет там демо и кажется сиильно платный
почитал erlang - замахаешься кониги делать
wcf лучше подходит кажется

да, dryad платный, бета и на него уже забили. будет haloop.
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135555
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaViPRos(ну типа заблокировал процессорпроцесса на какой то отрезок и эта инфа сразу должна быть доступна другим потокам - возможо на другом компе запущенным)

Посмотри streaminsight
посмотрел, это наверное хорошо для мониторинга (асутп и тд.), а для планирования врядь ли
...
Рейтинг: 0 / 0
на что хоть нарвался?
    #38135558
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lord British,

ну что такое - шуршит?
скоко надо что бы инсертить 50 000 000 записей? (по кб допустим)
...
Рейтинг: 0 / 0
25 сообщений из 119, страница 2 из 5
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / на что хоть нарвался?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]