Re[103]: Тормознутость и кривость linq
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 09.05.16 07:47
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Угу, и именно поэтому мы вставляем даже тормозное (потому как хэш от дерева в C# не взять) кэширование, только лишь бы не делать обход дерева при каждом запросе. Ну да, ну да. )))


Полагаю, этим ты признаёшь, что про "тормозную рефлексию" ты просто наплёл от балды ?
Итого — и тормоза не тормоза, и рефлексия не рефлексия.
Re[103]: Тормознутость и кривость linq
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 09.05.16 07:58
Оценка: +1
Здравствуйте, alex_public, Вы писали:

НС>>Для людей, знакомых именно с SQL шарповский query comprehension выглядит однозначно понятнее страшных птичих тропок у тебя.


_>Синтаксис без скобочек конечно приятнее. Но ровно до тех пор, пока не оказывается что в ответ на короткое невинное выражение Linq генерирует у себя внутри кучу неявных join или подзапросов.


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

>После встречи с таким любой знающий sql предпочтёт поставить лишнее скобочки, но зато хотя бы контролировать реальный итоговый код и видеть его нормальное отображение в исходнике.


Любой знающий SQL знает, что самое главное — это 1 правильный план запроса и 2 майнтенанс(рефакторинг, декомпозиция и тд) .
Собтсвенно, можешь сам убедиться, что OR/M создают люди, которые свободно владеют этим SQL.

В целом получается так, что ты несогласный с OR/M вообще. Sqlpp даже на микро-OR/M не тянет, поскольку sqlpp это 100% ручная работа. Основной бенефит OR/M — автоматика. Это дает новые возможности, например — архитектурные. Приложения которые пилятся разными командами могут теперь полагаться на эту автоматику.
Re[97]: Тормознутость и кривость linq
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 09.05.16 18:35
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Дык, не надо быть таким скользким. Одновременно быть громки троллём и тихим убегальщиком в соседских же подветках одной и той же темы и в один и тот же период времени — это надо иметь особый талант.


"Покажи мне доступ к таким ресурсам и гонки на них. " @ vdimas

V>Тот твой пост я почитал. Ответы были даны заранее. Как и 3 года назад. Ничего не изменилось. Ты нихрена не понимал и сейчас так же воинственно нихрена не понимаешь. Ладно бы тема была еще сложная какая-нить, но речь совсем уж о банальщине. Так шта, опять на эту тему перерыв. Глядишь, к пенсии доберемся. ))


"Покажи мне доступ к таким ресурсам и гонки на них. " @ vdimas
Re[103]: Тормознутость и кривость linq
От: Ночной Смотрящий Россия  
Дата: 09.05.16 21:51
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Угу, и именно поэтому мы вставляем даже тормозное (потому как хэш от дерева в C# не взять) кэширование


Опять пальцем в небо. Чтобы посчитать ключ ля кеширования нужно обойти дерево полностью. Так что если бы тормоза были в обходе дерева, то кеширование было бы лишено какого либо смысла.
Re[103]: Тормознутость и кривость linq
От: Ночной Смотрящий Россия  
Дата: 09.05.16 21:51
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Синтаксис без скобочек конечно приятнее.


Дело не в скобочках. Дело в том что в С++ тебе приходится вставать раком, чтобы описать простейщие для SQL конструкции. Тебя не случайно постоянно тыкают, как котенка, в проекции. Нет в С++ ad-hoc типов. А в SQL в основном они есть. И в шарпе соотвествующие типы присутствуют. Но в обычном шарпе даже промежуточные типы приходится раскрывать руками. А вот в query comprehension эти типы скрыты и синтаксический шум убран.
Но для того чтобы это увидеть, надо иметь хотя бы желание разобраться. А если желания нет — вот тогда и кажется, что разница только в наличии скобочек.

_> Но ровно до тех пор, пока не оказывается что в ответ на короткое невинное выражение Linq генерирует у себя внутри кучу неявных join или подзапросов.


Без практики эти фобии имеют нуевую ценность. Тут люди, в отличие от тебя, использовали это на практике, и прекрасно представляют есть ли такая проблема или нет.

_> После встречи с таким любой знающий sql предпочтёт поставить лишнее скобочки


Не говори за всех, тем более что ты sql знаешь хуже, чем большая часть твоих оппонентов.
Re[86]: Тормознутость и кривость linq
От: Ночной Смотрящий Россия  
Дата: 09.05.16 21:53
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>В джаве ровно так же, и вообще везде практически так же.


Если опыт ограничен использованием sqlite ...
Re[87]: Тормознутость и кривость linq
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 11.05.16 05:07
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, Serginio1, Вы писали:


_>>>Что-то ты похоже путаешь постоянные соединения и единственное на приложение. Кто тебе мешает иметь постоянное соединение в каждом потоке пула потоков?

S>> Из пула соединений ты можешь брать любое соединение в любом потоке. Зачем лишний геморрой привязки к потоку?
S>>Ты можешь ограничить количество соединений в пуле

_>Потому что это оптимальнее. )

Чем это оптимальнее? Соединения потоконезависимы. При этом, часто ограничивают время жизни неиспользуемых соединений
и солнце б утром не вставало, когда бы не было меня
Re[98]: Тормознутость и кривость linq
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 11.05.16 05:10
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, Serginio1, Вы писали:


S>> Не ахти и больше


S>>http://ru.stackoverflow.com/questions/496425/%d0%92%d1%85%d0%be%d0%b4-%d0%b2-%d0%b4%d0%b8%d1%80%d0%b5%d0%ba%d1%82%d0%be%d1%80%d0%b8%d1%8e-cd-ssh

S>> А так как client.RunCommand возвращающий себя https://www.crestron.com/reference/simpl_sharp/html/M_Crestron_SimplSharp_Ssh_SshClient_RunCommand.htm
S>>, то код будет аналогичным

S>> Можно сделать Extension методы и полностью получить твой код, даже используя SshClient.

S>>Все делается легко и непринужденно.

_>Ну так покажи пример, сравним) Главное не забудь, что приведённый мною код — это весь скрипт целиком, а не какой-то отрывок из него... )


Так будет тот же самый код только через точку (Ikemefula уже написал). Ну в конце только в конце нужно закрыть SshClient типа .Close()
и солнце б утром не вставало, когда бы не было меня
Re[86]: Тормознутость и кривость linq
От: alex_public  
Дата: 15.05.16 12:16
Оценка: -5 :)
Здравствуйте, Ikemefula, Вы писали:

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

_>>Эээ что? ) Ты где таких фантазий понабрался? )
I>Вот здесь подробнее:
I>http://programmers.stackexchange.com/questions/142065/creating-database-connections-do-it-once-or-for-each-query
I>В джаве ровно так же, и вообще везде практически так же.

Ты хоть сам то читаешь то, на что кидаешь ссылки?

По твоей же ссылке:

In .NET, calling SqlConnection.Open() will by default always transparently use connection pooling (see "Using Connection Pooling with SQL Server" on MSDN). So you can just grab a new connection using Open(), and call Close() when you're done, and .NET will do the right thing.

Note that without connection pooling, one connection per query would be a very bad idea because creating real database connections can be very costly (authentication, network overhead etc.), and the number of simultaneous open connections is usually very limited.


Т.е. как раз подтверждение моих слов. )))
Re[99]: Тормознутость и кривость linq
От: alex_public  
Дата: 15.05.16 12:25
Оценка:
Здравствуйте, Ikemefula, Вы писали:

>>Если ты ещё не понял, то приведённый мною код — это весь скрипт. Теперь ощущаешь разницу? Хотя если ты готов показать мне систему, где приведённый тобой кусок можно сохранить как файл и исполнить, то может ещё и поговорим о сравнение C# и Python для скриптов...

I>К твоему сведению, это свойство не питона,а любого динамического языка.
I>Для C# есть консоли всякие, но только дебаговые linq2pad. Собственно web .Net приложения могут компилироваться на лету, после деплоймента.

Ты похоже не понял о чём речь. Я говорю не про различие между интерпретируемым и компилируемым языком. Речь о лишнем синтаксическом мусоре типа класса приложения, функции main и т.п.

I>Реально именно C# тащить в такой блудняк смысла большого нет. Есть инструменты много более мощные, питон рядом с которыми даже рядом не валялся.


Нуу так приведи примеры таких инструментов. Если они действительно так хороши, то может я и перейду на них для наших внутренних скриптов и т.п.

I>Вобщем, именно про питон ты ровно ничего не показал


Ну на самом деле в данном примере были различные интересные особенности именно Питона (там и декораторы и менеджеры контента (with) и ещё некоторые нюансы), а не просто скриптового языка. Но если сравнивать с C#, то любой нормальный скриптовой будет удобнее в данной области. )))
Re[104]: Тормознутость и кривость linq
От: alex_public  
Дата: 15.05.16 12:31
Оценка: -4 :)))
Здравствуйте, Ikemefula, Вы писали:

_>>Угу, и именно поэтому мы вставляем даже тормозное (потому как хэш от дерева в C# не взять) кэширование, только лишь бы не делать обход дерева при каждом запросе. Ну да, ну да. )))

I>Полагаю, этим ты признаёшь, что про "тормозную рефлексию" ты просто наплёл от балды ?
I>Итого — и тормоза не тормоза, и рефлексия не рефлексия.

До тебя похоже как-то плохо доходит. Linq ORM есть разные. И если в какой-то из них сделана попытка (удачная на фоне других linq orm, но всё равно сильно тормозная на фоне голых строк) оптимизации через кэширование, то это совершенно не отменяет первопричину тормозов.
Re[100]: Тормознутость и кривость linq
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 15.05.16 12:38
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Ну на самом деле в данном примере были различные интересные особенности именно Питона (там и декораторы и менеджеры контента (with) и ещё некоторые нюансы), а не просто скриптового языка. Но если сравнивать с C#, то любой нормальный скриптовой будет удобнее в данной области. )))

Я тебя разочарую. Мне удобнее писать на C# чем на 1С.
А на счет питона тебе показали код один в один так еще и интелиссенсе. При этом без динамиков.
и солнце б утром не вставало, когда бы не было меня
Re[104]: Тормознутость и кривость linq
От: alex_public  
Дата: 15.05.16 12:41
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

_>>Синтаксис без скобочек конечно приятнее.

НС>Дело не в скобочках. Дело в том что в С++ тебе приходится вставать раком, чтобы описать простейщие для SQL конструкции.

Так приведи пример хоть одной такой SQL конструкции. А то ты как обычно много говоришь, а конкретики (кода) как обычно ровно ноль.

Ну а потом наоборот сделаем. Я приведу пример какой-нибудь SQL конструкции (например рекурсивного CTE запроса), а ты покажешь как оно без проблем на Linq записывается.
Отредактировано 15.05.2016 12:45 alex_public . Предыдущая версия .
Re[99]: Тормознутость и кривость linq
От: alex_public  
Дата: 15.05.16 12:53
Оценка:
Здравствуйте, Serginio1, Вы писали:

_>>Ну так покажи пример, сравним) Главное не забудь, что приведённый мною код — это весь скрипт целиком, а не какой-то отрывок из него... )

S> Так будет тот же самый код только через точку (Ikemefula уже написал). Ну в конце только в конце нужно закрыть SshClient типа .Close()

О, ещё один, до которого не дошло... Ну давай, покажи мне как ты будешь писать на C# приложение без всяких классов и функций (как показано в примере у Ikemefula, ведь это был законченный пример, не так ли?).
Re[100]: Тормознутость и кривость linq
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 15.05.16 14:00
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, Serginio1, Вы писали:


_>>>Ну так покажи пример, сравним) Главное не забудь, что приведённый мною код — это весь скрипт целиком, а не какой-то отрывок из него... )

S>> Так будет тот же самый код только через точку (Ikemefula уже написал). Ну в конце только в конце нужно закрыть SshClient типа .Close()

_>О, ещё один, до которого не дошло... Ну давай, покажи мне как ты будешь писать на C# приложение без всяких классов и функций (как показано в примере у Ikemefula, ведь это был законченный пример, не так ли?).


Там вызов функций есть. Имя класса может скрываться

using static System.Console;
//      ^
class Program 
{ 
    static void Main() 
    { 
        WriteLine("Hello world!"); 
        WriteLine("Another message"); 
    } 
}



многое разрешается через методы расширения
http://metanit.com/sharp/tutorial/3.18.php

Ну и функция возвращает this что позволяет писать цепочку кода
и солнце б утром не вставало, когда бы не было меня
Re[101]: Тормознутость и кривость linq
От: alex_public  
Дата: 15.05.16 14:15
Оценка:
Здравствуйте, Serginio1, Вы писали:

_>>О, ещё один, до которого не дошло... Ну давай, покажи мне как ты будешь писать на C# приложение без всяких классов и функций (как показано в примере у Ikemefula, ведь это был законченный пример, не так ли?).

S> Там вызов функций есть. Имя класса может скрываться
S>
S>using static System.Console;
S>//      ^
S>class Program 
S>{ 
S>    static void Main() 
S>    { 
S>        WriteLine("Hello world!"); 
S>        WriteLine("Another message"); 
S>    } 
S>}
S>

S> многое разрешается через методы расширения
S>http://metanit.com/sharp/tutorial/3.18.php
S> Ну и функция возвращает this что позволяет писать цепочку кода

Ох...

Да не про то речь. ))) Вот класс Program и функция Main вот прямо в этом твоём коде. Без них можно (пример Ikemefula был без них) или нет? И если нет, то объясни зачем они нужны в подобном скрипте...
Re[102]: Тормознутость и кривость linq
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 15.05.16 14:22
Оценка:
Здравствуйте, alex_public, Вы писали:


_>Да не про то речь. ))) Вот класс Program и функция Main вот прямо в этом твоём коде. Без них можно (пример Ikemefula был без них) или нет? И если нет, то объясни зачем они нужны в подобном скрипте...


То есть 2-3 лишние строчки тебя так смущают?
А то, что интеллисенсе ускоряет набор кода и синтаксический контроль тебя это не волнует?
Мало того, я могу сделать приложение, которое будет с помощью рослина https://github.com/dotnet/roslyn/wiki/Scripting-API-Samples
скомпилировать код. И он ничем не будет отличаться от кода Ikemefula

Кстати а в скрипте где ты указываешь какие библиотеки и классы использовать?
и солнце б утром не вставало, когда бы не было меня
Отредактировано 15.05.2016 14:34 Serginio1 . Предыдущая версия .
Re[103]: Тормознутость и кривость linq
От: alex_public  
Дата: 15.05.16 15:17
Оценка:
Здравствуйте, Serginio1, Вы писали:

_>>Да не про то речь. ))) Вот класс Program и функция Main вот прямо в этом твоём коде. Без них можно (пример Ikemefula был без них) или нет? И если нет, то объясни зачем они нужны в подобном скрипте...

S> То есть 2-3 лишние строчки тебя так смущают?

Ну во-первых не 2-3 строки, т.к. там ещё куча скобочек, модификаторов доступа и т.п. ненужного синтаксического мусора.
А во-вторых для обсуждаемого скрипта из нескольких строк подобный синтакический мусор очень даже существенен, т.к. сравним с объёмом полезного кода.

S>А то, что интеллисенсе ускоряет набор кода и синтаксический контроль тебя это не волнует?


Какое интересно автодополнение ты видишь в данном примере? )

S>Мало того, я могу сделать приложение, которое будет с помощью рослина https://github.com/dotnet/roslyn/wiki/Scripting-API-Samples

S>скомпилировать код. И он ничем не будет отличаться от кода Ikemefula

Хы, ну теоретически то всё можно. Вот к примеру вполне себе существуют интерпретаторы (а не компиляторы) C++, только вот никто особо не стремится использовать их для написания скриптов (не считая пары специфических случаев, типа обработки данных в CERN).

S> Кстати а в скрипте где ты указываешь какие библиотеки и классы использовать?


Стандартную библиотеку указывать не надо. Дополнительные библиотеки указываются как и везде с помощью команды import. А причём тут это вообще? )
Re[104]: Тормознутость и кривость linq
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 15.05.16 15:45
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, Serginio1, Вы писали:


_>>>Да не про то речь. ))) Вот класс Program и функция Main вот прямо в этом твоём коде. Без них можно (пример Ikemefula был без них) или нет? И если нет, то объясни зачем они нужны в подобном скрипте...

S>> То есть 2-3 лишние строчки тебя так смущают?

_>Ну во-первых не 2-3 строки, т.к. там ещё куча скобочек, модификаторов доступа и т.п. ненужного синтаксического мусора.

_>А во-вторых для обсуждаемого скрипта из нескольких строк подобный синтакический мусор очень даже существенен, т.к. сравним с объёмом полезного кода.

Эти скобочки автоматически добавляются.
S>>А то, что интеллисенсе ускоряет набор кода и синтаксический контроль тебя это не волнует?

_>Какое интересно автодополнение ты видишь в данном примере? )

Все методы put,mount итд

lcd("project")
    .mount("-t tmpfs -o size=500M tmpfs /mnt/ramdisk")
    .mkdir("/mnt/ramdisk/project")
    .cd("/mnt/ramdisk/project"):
    .put("Src", "./")
    .make("install")
    .umount("/mnt/ramdisk");

S>>Мало того, я могу сделать приложение, которое будет с помощью рослина https://github.com/dotnet/roslyn/wiki/Scripting-API-Samples
S>>скомпилировать код. И он ничем не будет отличаться от кода Ikemefula

_>Хы, ну теоретически то всё можно. Вот к примеру вполне себе существуют интерпретаторы (а не компиляторы) C++, только вот никто особо не стремится использовать их для написания скриптов (не считая пары специфических случаев, типа обработки данных в CERN).

Так код то тот же, что и у тебя. На С++ будет другой код.
Ты просил написать тот же код, вот пример. Ни строчки больше. А если сделать универсальное, но нужно добавить импорты

S>> Кстати а в скрипте где ты указываешь какие библиотеки и классы использовать?


_>Стандартную библиотеку указывать не надо. Дополнительные библиотеки указываются как и везде с помощью команды import. А причём тут это вообще? )

А в том, что их указывать то надо по любом. Так, что в худшем случае речь идет от двух строчках, в лучшем со Scripting API одно и тоже.

Вот пример использования в 1С


врап=новый COMОбъект("NetObjectToIDispatch45");
    КлассДляВычесленияВыражений=Врап.ПолучитьТипИзСборки("ScriptApiDlls.КлассДляВычесленияВыражений",ПутьКДлл+"ScriptApiDlls.dll");

    Опции=КлассДляВычесленияВыражений.Опции;
    Катаог=Врап.ПолучитьТип("System.AppDomain").CurrentDomain.BaseDirectory;
    ИмяСборкиAngleSharp=Врап.ПолучитьТип("System.IO.Path").Combine(Катаог,"AngleSharp.dll");
    СтрокаКода = "string WebsiteUrl = ""http://localhost:54361"";
    |var configuration = Configuration.Default.WithDefaultLoader().WithCookies();
    |    var context = BrowsingContext.New(configuration);
    |    context.OpenAsync(WebsiteUrl).Wait();
    |   
    |   var elem=context.Active.QuerySelector<IHtmlAnchorElement>(""a.log-in"");
    |   if (elem==null) return context.Active.Body.InnerHtml;
    |   elem.Navigate().Wait();
    |    context.Active.QuerySelector<IHtmlFormElement>(""form"").Submit(new
    |    {
    |        User = ""User"",
    |        Password = ""secret""
    |    }).Wait();
    |context.Active.QuerySelector<IHtmlAnchorElement>(""a.secret-link"").Navigate().Wait();
    |
    |return context.Active.QuerySelector(""p"").Text();
    |";
    
    scr = Опции
    .WithReferences(ИмяСборкиAngleSharp)
    .WithImports("System","AngleSharp","AngleSharp.Dom.Html","AngleSharp.Extensions");
   
    резулт = КлассДляВычесленияВыражений.Вычислить(СтрокаКода,scr);
    Сообщить(резулт);
и солнце б утром не вставало, когда бы не было меня
Отредактировано 15.05.2016 15:54 Serginio1 . Предыдущая версия .
Re[105]: Тормознутость и кривость linq
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 15.05.16 18:40
Оценка:
Здравствуйте, alex_public, Вы писали:

I>>Полагаю, этим ты признаёшь, что про "тормозную рефлексию" ты просто наплёл от балды ?

I>>Итого — и тормоза не тормоза, и рефлексия не рефлексия.

_>До тебя похоже как-то плохо доходит. Linq ORM есть разные. И если в какой-то из них сделана попытка (удачная на фоне других linq orm, но всё равно сильно тормозная на фоне голых строк) оптимизации через кэширование, то это совершенно не отменяет первопричину тормозов.


Та фактическая разница в быстродействии между строками и linq-запросами, которая есть у _всех_ ORM, обусловлена совсем не рефлексией. Так понятно ? Даже медленный EF не использует здесь рефлексию в hot-path, нигде и ни разу.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.