Re[26]: ответ на вопрос: Почему новые программы работают мед
От: Mamut Швеция http://dmitriid.com
Дата: 25.06.12 14:49
Оценка: +1
N>>>"Working set" — это Обстракция. Это термин, который каждый понимает по-разному. Я бы его не использовал.
PD>>Это не абстракция. Это совершенно четкий параметр : количество страниц процесса, находящееся в данный момент в ОП.

N>А. То есть это resident set. А не какой-то абстрактный working set.


Заметь, как всего за 2 сообщения он легко и изящно ушел с обсуждаемой темы. А ты повелся. Аяяяй


dmitriid.comGitHubLinkedIn
Re[26]: ответ на вопрос: Почему новые программы работают мед
От: Трололоша  
Дата: 25.06.12 17:25
Оценка: +1 -1
Здравствуйте, netch80, Вы писали:

N>А. То есть это resident set. А не какой-то абстрактный working set.

Термин Working Set это устоявшийся термин, если чо.
... << RSDN@Home>>
Да, йа зелёный тролль!
Re[27]: ответ на вопрос: Почему новые программы работают мед
От: Трололоша  
Дата: 25.06.12 17:25
Оценка: :)
Здравствуйте, Mamut, Вы писали:

N>>А. То есть это resident set. А не какой-то абстрактный working set.

M>Заметь, как всего за 2 сообщения он легко и изящно ушел с обсуждаемой темы. А ты повелся. Аяяяй

Щас вернём!
... << RSDN@Home>>
Да, йа зелёный тролль!
Re[15]: ответ на вопрос: Почему новые программы работают меделнно
От: rameel https://github.com/rsdn/CodeJam
Дата: 25.06.12 17:30
Оценка: 10 (5) :)
Здравствуйте, Pavel Dvorkin, Вы писали:

НС>>Главное — он либо не зависит или слабо зависит от размера исходников, что раньше и было (зависимость < O(N)), либо зависит сильно, что сейчас встречается чаще. Причем бывают очень тяжелые случаи, типа вложенных лямбд в шарпе, для которых алгоритм без эвристик, емнип, O(N^4). В эпоху 1 мегабайта таких фич не было в промышленных языках.


PD>Объем данных N^4 ? Что за структуры такие ? Четырехмерные массивы строятся ?


Re: [5.0] Сильно тормозит на вложенных лямбдах
Автор: nikov
Дата: 07.12.09

Вложенные лямбды + overload resolution потенциально могут давать экспоненциальную сложность по времени и по памяти.


Re[3]: [Этюд, C#] Overload resolution
Автор: nikov
Дата: 04.02.09

Кстати, интересно, что если лямбда содержит вложенные лямбды, то это процесс может вызываться рекурсивно. Я, кажется, когда-то приводил пример, когда это вызывает комбинаторный взрыв:

using System;

class Program
{
    static void Main()
    {
        Foo(a => Foo(b => Foo(c => Foo(d => Foo(e => Foo(f => Foo(g => Foo(h => a))))))));
    }

    static string Foo(Func<byte, byte> f) { return null; }
    static string Foo(Func<short, short> f) { return null; }
    static string Foo(Func<int, int> f) { return null; }
    static string Foo(Func<long, long> f) { return null; }
    static string Foo(Func<string, string> f) { return null; }
}


А вот другой пример, в котором программа в 62 байта напрягает компилятор шарпа так, что современный процессор жжет кислород около минуты
Re[6]: [Этюд, C#] Долгая компиляция
Автор: nikov
Дата: 23.07.10

class X<A,B,C,D,E>{class Y:X<Y,Y,Y,Y,Y>{Y.Y.Y.Y.Y.Y.Y.Y.Y y;}}


PD>Но как из исходного файла в 1 Мб образуется объем промежуточных данных, скажем, в 100 Мб — твой ликбез не объясняет.


Вот последний пример, кроме долгой компиляции, порождает сборку размером почти в 28 Мб.

И, как уже сказали, паскаль из 90-х, который работал при 1 Мб и современный компилятор вещи отнюдь не аналогичные, у них сложность структуры обрабатываемых данных совершенно другого порядка.
... << RSDN@Home 1.2.0 alpha 5 rev. 43>>
Re[27]: ответ на вопрос: Почему новые программы работают мед
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 25.06.12 17:34
Оценка: +1
Здравствуйте, Mamut, Вы писали:

N>>А. То есть это resident set. А не какой-то абстрактный working set.

M>Заметь, как всего за 2 сообщения он легко и изящно ушел с обсуждаемой темы. А ты повелся. Аяяяй

А я на подобные "уводы" реагирую просто как на отсутствие ответа. У меня нет цели "зафиксировать" какое-то незнание или другое качество собеседника, и так понятно, какой результат.
The God is real, unless declared integer.
Re: ответ на вопрос: Почему новые программы работают меделнно
От: henson Россия http://www.njt-rails.com
Дата: 26.06.12 01:01
Оценка:
Здравствуйте, newCL, Вы писали:

CL>http://stackoverflow.com/questions/472906/net-string-to-byte-array-c-sharp


CL>И так повсюду: везде и всюду такты и байты расходуются ниначто, т.е. выделяется память там, где её выделять не нужно, и делается то, что делать не нужно.


Согласен, вопрос что делать и кому?
Re[16]: ответ на вопрос: Почему новые программы работают меделнно
От: Pavel Dvorkin Россия  
Дата: 26.06.12 02:41
Оценка: -2
Здравствуйте, rameel, Вы писали:

Я вполне допускаю, что на вложенных лямбдах все может сильно тормозить. Более того, если дело дойдет до LinQ, то тормозить уже может не только компилятор, а и рабочая программа, причем так, что и в кошмарном сне не приснится

http://rsdn.ru/forum/flame.comp/4098976.1.aspx
Автор: Pavel Dvorkin
Дата: 29.12.10


Только вот в С++ до VS2010 не было лямбд никаких вообще. В моей программе, о которой я говорил, что для ее трансляции нужно 15-25 Мб, их, естественно, тоже нет.

Так что с вложенными лямбдами пусть хоть экспонента по памяти. Почему без лямбд N^4 ?
With best regards
Pavel Dvorkin
Re[27]: ответ на вопрос: Почему новые программы работают мед
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 26.06.12 03:48
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

N>>А. То есть это resident set. А не какой-то абстрактный working set.

PD>Называй как хочешь. Я привык к понятию working set (рабочее множество, рабочий набор).
N>>Я, конечно, понимаю стремление MS всё обозвать по-своему, но потом приходится бороться с последствиями этого.
PD>Вот тут ты не прав. Я этот термин знал раньше, чем узнал о существовании MS . Вроде как здесь прочитал

В VMS, судя по рассказам её поклонников, это значит все аллоцированные страницы процесса. Что логичнее.
И отсутствие этого термина в современных Unix наводит на мысли, что от него избавились.

PD>Дейтел Г. Введение в операционные системы. М.: Мир. 1987.


Одного автора недостаточно.
The God is real, unless declared integer.
Re[17]: ответ на вопрос: Почему новые программы работают меделнно
От: rameel https://github.com/rsdn/CodeJam
Дата: 26.06.12 12:59
Оценка: 1 (1)
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Я вполне допускаю, что на вложенных лямбдах все может сильно тормозить.


Я примеры привел не только с лямбдами, там еще есть дженерики.

PD>Более того, если дело дойдет до LinQ, то тормозить уже может не только компилятор, а и рабочая программа, причем так, что и в кошмарном сне не приснится


PD>http://rsdn.ru/forum/flame.comp/4098976.1.aspx
Автор: Pavel Dvorkin
Дата: 29.12.10


О да, помню, помню. Взять для примера крайне неоптимальную структуру данных, использовать неоптимальный алгоритм, а потом удивляться проседанию производительности на несколько порядков, в чем конечно же повинен только линк! Странно, что в том примере БД не использовали поверх WCF запущенной на каком-нибудь эмуляторе устройств в виртуальной машине в сетке с пингом до нескольких секунд и скоростью в 9600 бод!

Неужели здравый смысл не подсказывает разобраться в том, что происходит на самом деле, прежде, чем набрасываться с обвинениями в чудовищно низкой производительности линка. Так как на чем ни реализуй алгоритм маляра Шлемиля, все равно в итоге будет получаться не эффективно. Там же по ссылке я переписал этот пример, заменив в нем только структуру данных, и в результате, буквально в одно мгновение, цифры уменьшились с нескольких порядков до 1.

Что касается использования самого линка, его, как и любую другую технологию или даже алгоритм, следует использовать там, где от него есть выгода. В твоем примере, от него нет никакой пользы, только вред, и не только в плане производительности, но и в понятности. Думаю никто не станет спорить (хотя, зная насколько человек бывает иррациональным, сильно не удивлюсь, ибо флеймы в КСВ это уже не раз доказывали ) с тем, что в примере ниже 1 вариант понятен даже не напрягая извилины в отличие от второго, в котором желание автора кода еще нужно с уметь распарсить.
for (int i = 0; i < size; i++)
    a[i] = i + 1;
    
vs

var result = a.Aggregate(
    empty,
    (acc, res) =>
        acc.Count() == 0
            ? new[] { res }
            : acc.Concat(new[] { res + acc.Last() }));


Но это же не значит, что теперь линк не нужен, ибо вот пример, иллюстрирующий обратное, его не только писать быстрее, но и читать, что более важно:
var sum = 0
for (var i = 0; i < a.Length; i++)
    sum += a[i];
    
vs

var sum = a.Sum();


Конечно, чем сложнее структура, тем выбор того или иного алгоритма и подхода (императивный, декларативный, функциональный) сильнее сказывается на скорости и читаемости. Вот недавний пример в форуме Философия программирования Красиво избежать побочных эффектов
Автор: Roman Odaisky
Дата: 22.06.12

int cOwnSeen = 0;
for (item : items)
    if (item.owner != myself || cOwnSeen++ < limit)
        processItem(item);


Все попытки изобразить алгоритм в функциональном стиле с сохранением семантики страдают сильной избыточностью так, что за деревьями леса не видно, то бишь, самого алгоритма.

Ну так вот, я отвлекся, по поводу использования линка. Он используется там, где его декларативность заруливает в минуса императив (верно и наоборот!). Вот здесь Игорь привел пример использования линка Re[10]: Давайте поговорим о c# 3.0
Автор: IT
Дата: 22.09.08
. Оцени, код на линке почти в 4 раза меньше императивного, при этом, что очень важно, он понятен в отличие от своего императивного собрата, который даже в один экран не влезает.

PD>Только вот в С++ до VS2010 не было лямбд никаких вообще. В моей программе, о которой я говорил, что для ее трансляции нужно 15-25 Мб, их, естественно, тоже нет.


О какой программе идет речь, и где ты об этом говорил?

PD>Так что с вложенными лямбдами пусть хоть экспонента по памяти. Почему без лямбд N^4 ?


А где сказано, что без лямбд потребление памяти N^4? Я такого в тексте нигде не вижу. Про N^4 речь шла именно о вложенных лямбдах.
Re[13]: ответ на вопрос: Почему новые программы работают меделнно
Автор: Ночной Смотрящий
Дата: 20.06.12

Причем бывают очень тяжелые случаи, типа вложенных лямбд в шарпе, для которых алгоритм без эвристик, емнип, O(N^4).

... << RSDN@Home 1.2.0 alpha 5 rev. 43>>
Re[17]: ответ на вопрос: Почему новые программы работают меделнно
От: MxMsk Португалия  
Дата: 26.06.12 13:28
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Я вполне допускаю, что на вложенных лямбдах все может сильно тормозить. Более того, если дело дойдет до LinQ, то тормозить уже может не только компилятор, а и рабочая программа, причем так, что и в кошмарном сне не приснится


PD>http://rsdn.ru/forum/flame.comp/4098976.1.aspx
Автор: Pavel Dvorkin
Дата: 29.12.10


А Ikemefula то, как в воду глядел
Автор: Ikemefula
Дата: 30.12.10
! Надо бы набросать здесь еще какой-нибудь дебильный код, чтобы на следующие два года был говно-пример.
Re[18]: ответ на вопрос: Почему новые программы работают меделнно
От: Трололоша  
Дата: 26.06.12 16:23
Оценка: +1
Здравствуйте, MxMsk, Вы писали:

MM>Надо бы набросать здесь еще какой-нибудь дебильный код, чтобы на следующие два года был говно-пример.

Лучше бы нормальный пример сразу приводили.
А то фиг вас знает, может вы там все именно так и пишете, а когда выяснилось что говнокод то стали оправдываться что это дескать шутка была.
... << RSDN@Home>>
Да, йа зелёный тролль!
Re[18]: ответ на вопрос: Почему новые программы работают меделнно
От: Pavel Dvorkin Россия  
Дата: 26.06.12 17:23
Оценка:
Здравствуйте, rameel, Вы писали:

R>О да, помню, помню. Взять для примера крайне неоптимальную структуру данных, использовать неоптимальный алгоритм, а потом удивляться проседанию производительности на несколько порядков, в чем конечно же повинен только линк! Странно, что в том примере БД не использовали поверх WCF запущенной на каком-нибудь эмуляторе устройств в виртуальной машине в сетке с пингом до нескольких секунд и скоростью в 9600 бод!


Нет. Там ниже по теме я задал вполне конкретный вопрос — что мне предпринять, чтобы гарантированно не попасть в эту ситуацию. Ответа на него не последовало. Можешь — дай его, пожалуйста. Нет — значит, что-то и впрямь неладно в Датском королевстве.

R>Неужели здравый смысл не подсказывает разобраться в том, что происходит на самом деле, прежде, чем набрасываться с обвинениями в чудовищно низкой производительности линка. Так как на чем ни реализуй алгоритм маляра Шлемиля, все равно в итоге будет получаться не эффективно. Там же по ссылке я переписал этот пример, заменив в нем только структуру данных, и в результате, буквально в одно мгновение, цифры уменьшились с нескольких порядков до 1.


Замечательно. Я и не утверждаю, что с линком нельзя написать более или менее неэффективно. Но вот без него написать столь неэффективно попросту нельзя. Поэтому еще раз задаю тот же вопрос.

R>Что касается использования самого линка, его, как и любую другую технологию или даже алгоритм, следует использовать там, где от него есть выгода. В твоем примере, от него нет никакой пользы, только вред, и не только в плане производительности, но и в понятности.


Пример не мой, его предложил кто-то, я лишь его протестировал.

R>Но это же не значит, что теперь линк не нужен, ибо вот пример, иллюстрирующий обратное, его не только писать быстрее, но и читать, что более важно:

R>
R>var sum = 0
R>for (var i = 0; i < a.Length; i++)
R>    sum += a[i];
    
R>vs

R>var sum = a.Sum();
R>




PD>>Только вот в С++ до VS2010 не было лямбд никаких вообще. В моей программе, о которой я говорил, что для ее трансляции нужно 15-25 Мб, их, естественно, тоже нет.


R>О какой программе идет речь, и где ты об этом говорил?


Да все о той же, для которой 15-25 Мб для компиляции требуется.

http://rsdn.ru/forum/flame.comp/4790728.1.aspx
Автор: Pavel Dvorkin
Дата: 24.06.12


PD>>Так что с вложенными лямбдами пусть хоть экспонента по памяти. Почему без лямбд N^4 ?


R>А где сказано, что без лямбд потребление памяти N^4? Я такого в тексте нигде не вижу. Про N^4 речь шла именно о вложенных лямбдах.


Ok, бог с ними, вложенными лямбдами. Без них — O(N^?) . Чему равен "?"
With best regards
Pavel Dvorkin
Re[18]: ответ на вопрос: Почему новые программы работают меделнно
От: Pavel Dvorkin Россия  
Дата: 26.06.12 17:29
Оценка:
Здравствуйте, MxMsk, Вы писали:

PD>>http://rsdn.ru/forum/flame.comp/4098976.1.aspx
Автор: Pavel Dvorkin
Дата: 29.12.10


MM>А Ikemefula то, как в воду глядел
Автор: Ikemefula
Дата: 30.12.10
! Надо бы набросать здесь еще какой-нибудь дебильный код, чтобы на следующие два года был говно-пример.


Надо дать то, чего я еще тогда добивался и сейчас опять добиваюсь — правил, как избежать попадания в такую ситуацию. Иначе как мне узнать (без запуска) — дебильный будет код или нет ?
Для императивного кода в большинстве случаев можно сказать, что тут будет — O(N), O(NlgN), O(N^2), O(2^N)...
Вот и дай мне такой же способ оценить зависмость t=f(N) для линка. Тогда и вопросов не будет и дебильного кода тоже.
With best regards
Pavel Dvorkin
Re[19]: поправка
От: Pavel Dvorkin Россия  
Дата: 26.06.12 17:47
Оценка:
Читать так

Замечательно. Я и не утверждаю, что с линком нельзя написать более или менее эффективно.
With best regards
Pavel Dvorkin
Re[19]: ответ на вопрос: Почему новые программы работают меделнно
От: MxMsk Португалия  
Дата: 26.06.12 18:54
Оценка: +1
Здравствуйте, Трололоша, Вы писали:

Т>Лучше бы нормальный пример сразу приводили.

Да никто не стал бы использовать Linq. Какой нужно привести для этого пример?

Т>А то фиг вас знает, может вы там все именно так и пишете, а когда выяснилось что говнокод то стали оправдываться что это дескать шутка была.

Я в конце ветки объяснил, почему это был стеб изначально. Просто некоторым очень хочется убедить себя, что Linq — говно, вот они и видят то, что хотят.
Re[20]: ответ на вопрос: Почему новые программы работают меделнно
От: Трололоша  
Дата: 26.06.12 19:02
Оценка:
Здравствуйте, MxMsk, Вы писали:

Т>>Лучше бы нормальный пример сразу приводили.

MM>Да никто не стал бы использовать Linq. Какой нужно привести для этого пример?
Не надо было вообще писать того кода.

Т>>А то фиг вас знает, может вы там все именно так и пишете, а когда выяснилось что говнокод то стали оправдываться что это дескать шутка была.

MM>Я в конце ветки объяснил, почему это был стеб изначально.
Что было потом, никому уже не интересно. Народ ссылается на изначальное сообщение а там адЪ и угар.

MM>Просто некоторым очень хочется убедить себя, что Linq — говно, вот они и видят то, что хотят.

А он и есть говно, когда используется не к месту.
И именно пример такого использования был подогнан, но в ином контексте.
Теперь на него ссылаются.
Первый раз вижу чтоб так сами себя затроллили.
... << RSDN@Home>>
Да, йа зелёный тролль!
Re[19]: ответ на вопрос: Почему новые программы работают меделнно
От: MxMsk Португалия  
Дата: 26.06.12 19:16
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Надо дать то, чего я еще тогда добивался и сейчас опять добиваюсь — правил, как избежать попадания в такую ситуацию. Иначе как мне узнать (без запуска) — дебильный будет код или нет ?

PD>Для императивного кода в большинстве случаев можно сказать, что тут будет — O(N), O(NlgN), O(N^2), O(2^N)...
А как ты это определяешь, сложность для императивного кода?
Re[16]: ответ на вопрос: Почему новые программы работают меделнно
От: Ночной Смотрящий Россия  
Дата: 26.06.12 19:54
Оценка:
Здравствуйте, rameel, Вы писали:

И охота тебе было. Все равно ж бесполезно.
Re[20]: ответ на вопрос: Почему новые программы работают меделнно
От: Pavel Dvorkin Россия  
Дата: 27.06.12 02:15
Оценка:
Здравствуйте, MxMsk, Вы писали:

MM>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Надо дать то, чего я еще тогда добивался и сейчас опять добиваюсь — правил, как избежать попадания в такую ситуацию. Иначе как мне узнать (без запуска) — дебильный будет код или нет ?

PD>>Для императивного кода в большинстве случаев можно сказать, что тут будет — O(N), O(NlgN), O(N^2), O(2^N)...
MM>А как ты это определяешь, сложность для императивного кода?

Не понял. Ты хочешь, чтобы я тебе лекцию прочитал о зависимости t=f(N) для разных алгоритмов, начиная с линейного поиска и кончая NP-полными задачами ? Так об этом столько понаписано...

Для той пресловутой задачи : линейный цикл, поэтому O(N).
With best regards
Pavel Dvorkin
Re[21]: ответ на вопрос: Почему новые программы работают меделнно
От: MxMsk Португалия  
Дата: 27.06.12 03:32
Оценка: +1
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Не понял. Ты хочешь, чтобы я тебе лекцию прочитал о зависимости t=f(N) для разных алгоритмов, начиная с линейного поиска и кончая NP-полными задачами ? Так об этом столько понаписано...

Я хочу сказать, что оценка времени даже линейного цикла базируется на некотором знании о том, как этот цикл реализуется компилятором. То же самое и с Linq. Чтобы оценить сложность, нужно понимать, во что компилируются соответствующие методы. Как правило, имеем те же O(N). Более высокая сложность может получиться при наличии вложенных вызовов. В сущности, те же самые правила
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.