OberonCore https://forum.oberoncore.ru/ |
|
Статья Производительноть .NET миф или реальность? https://forum.oberoncore.ru/viewtopic.php?f=26&t=716 |
Страница 1 из 1 |
Автор: | Штирлиц [ Пятница, 02 Ноябрь, 2007 09:42 ] |
Заголовок сообщения: | Статья Производительноть .NET миф или реальность? |
Купил сегодня журнал IT-Спец (за октябрь). Пока ехал на работу прочел статью "Производительноть .NET миф или реальность?" Статья начинается цитатой: <<"Для преобразования символа в нижний регистр мы используем паттерн "Интерпретатор" реализованный как синглетон и создаваемый с помощью фабрики классов" - такие фразы нам приходится слышать на семинарах для программистов, которые периодитечски проводит компания Microsoft. А что будет если сравнить эту фразу вот с такой "для преобразования символов в нижний регистр необходимо вычесть дельту между началами регистровых алфавитов" Философи Что по вашему будет работать быстрее? К сожалению, большинство программистов, выросших на Visual Studio 2003 и старше, все реже задают себе вопрос.>> Далее автор приводит ответы авторитетных программистов, авторов статей и обладателей MVP. << Недавно на моем любимом форуме по программированию я увидел сообщение от начинающего программиста на тему "C# и перечисления". Дело в том, что спрашивающий не знал, как выделить определенный бинарный флаг из числа. .... Расмотрим два ответа: public enum TaskStatus { Terminated = 1, Stoped = 2, Idle = 4, Working = 8, Stopping = 16 } Ответ #1: static bool StatusIn(TaskStatus enm, params TaskStatus[] enms) { foreach(a tEnum in enms) { if (enum != tEnum) return true; } return false; } Ответ #2: static bool StatusIn(TaskStatus enm, params TaskStatus[] enms) { return (Array.IndexOf(enms, enm) != -1); } Что тут можно сказать? Мне становится не по себе при попытке представить скорость программ, которые пишут эти специалисты, превращая атомарные операции в циклы. Между прочим второй ответ от (MVP), даже МЕНЕЕ производителен не смотря на кажущуюся простоту, поскольку IndexOf вызывает еще одну функцию, где в цикле ведется поиск необходимого значения. Ответ должен, конечно быть таким TaskStatus s = TaskStatus.Stoped | TaskStatus.Terminated.>> Теперь понятно откуда у современных программ ноги растут, вернее мегабайты и гигабайты объема. Особенно у ведущих производителей ПО. Как же оказывается прав дедушка Вирт, когда вычищал из своих языков весь "синтактический сахар", оставляя то что действительно необходимо. При этом не теряя мощности самого языка. В этой статье tще приводится несколько примеров на основе C# и введенных в язык полезностей типа foreach. Жаль, что я не нашел в инете статью в электронном виде. |
Автор: | Info21 [ Пятница, 02 Ноябрь, 2007 10:30 ] |
Заголовок сообщения: | Re: Статья Производительноть .NET миф или реальность? |
Принцип Калашникова в действии. Сфера ИТ -- система без памяти, а так как помногу вовлекается молодежь, которая легко зомбируется, то и вот, имеем гималаи хрени. |
Автор: | ScrollLock [ Пятница, 02 Ноябрь, 2007 12:25 ] |
Заголовок сообщения: | Re: Статья Производительноть .NET миф или реальность? |
Штирлиц писал(а): проводит компания Microsoft. А что будет если сравнить эту фразу вот с такой "для преобразования символов в нижний регистр необходимо вычесть дельту между началами регистровых алфавитов" Не всегда это так - правило не работает, например, в кодировке 866 и наверное в KOI8, в UNICODE тоже не всегда. Так что пусть лучше специальный класс делает. Цитата: Теперь понятно откуда у современных программ ноги растут, вернее мегабайты и гигабайты объема. Особенно у ведущих производителей ПО. Большая программа - значит солидная, тормозит - значит "думает" ![]() Цитата: Как же оказывается прав дедушка Вирт, когда вычищал из своих языков весь "синтактический сахар", оставляя то что действительно необходимо. В данном случае это ни при чём: подобную глупость для флагов (она не только тормозная, но и неверная) можно написать на любом языке. |
Автор: | Штирлиц [ Пятница, 02 Ноябрь, 2007 13:24 ] |
Заголовок сообщения: | Re: Статья Производительноть .NET миф или реальность? |
ScrollLock писал(а): Как же оказывается прав дедушка Вирт, когда вычищал из своих языков весь "синтактический сахар", оставляя то что действительно необходимо. В данном случае это ни при чём: подобную глупость для флагов (она не только тормозная, но и неверная) можно написать на любом языке. Это понятно, что такое можно на любом языке сморозить. В статье еще несколько примеров было с примерами на C#, где высокоуровневые конструкции языка C# дают плохую производительность. Я же не буду всю статью переписывать здесь. Общий лейтмотив статьи такой, что "... чем более высокоуровневая конструкция, тем меньше ее область применения" и приводятся примеры этого. Когда я написало "дедушка Вирт, когда вычищал из своих языков весь "синтактический сахар", я имел ввиду, что надо сохранять баланс низкоуровневых и высокоуровневых конструкций в языке. Мне кажется, что это ему удалось. А в заключении автор написал "Существует мнение, что программы на С++ получаются более производительными, зато на C# писать их быстрее. Хочу отметить, что разница в языковых конструкциях действительно дает преимущество C#? но если вы решаете действительно сложную задачу, где используется сложные алгоритмы и где производительность имеет первостепенную важность, тогда разница между С++ и C# минимальна... Другими словами - если писать суперкачественно, вам придется выкинуть все фишки C# и использовать для оптимизации те же указатели. В чем тогда разница между С++ и C#?" В древнем номере журнала PC Magazine (по-моему) была как-то статья, где сравнивалась MFC и OWL от Borland. Известно, что по оптимизации Microsoft C++ превосходит Borland C++, но там приводился примеры, когда по скорости выполнения Borland С++ превосходил Microsoft C++, причем существенно, только из-за того, что OWL была гораздо лучше спроектирована, чем MFC. Не знаю как сейчас, но тогда MFC была похожа на китайскую грамоту. |
Автор: | Штирлиц [ Пятница, 02 Ноябрь, 2007 13:33 ] |
Заголовок сообщения: | Re: Статья Производительноть .NET миф или реальность? |
Вроде бы даже в последнюю версию C# должны войти конструкции типа SQL. Вопрос - зачем это надо в C#, когда есть язык SQL прекрасно справляющийся с возложенными на него функциями? Мне, например, не понятно. Язык всего и вся уже был PL/I. Ничего хорошего. У нас преподаватель говорил, что PL/I - хороший язык, но надо из него 80% возможностей выкинуть. |
Автор: | batyrmastyr [ Пятница, 02 Ноябрь, 2007 17:15 ] |
Заголовок сообщения: | Re: Статья Производительноть .NET миф или реальность? |
Штирлиц писал(а): Вроде бы даже в последнюю версию C# должны войти конструкции типа SQL. Вопрос - зачем это надо в C#, когда есть язык SQL прекрасно справляющийся с возложенными на него функциями? Как зачем? тут же С++ 2009 должен выйти. Стало быть тот у кого стандарт толще -тот и круче. Вот и "набивают вес". Надо подкинуть им идею включить PL/1 как подмножество. ![]() |
Автор: | Иван Кузьмицкий [ Пятница, 02 Ноябрь, 2007 20:52 ] |
Заголовок сообщения: | Re: Статья Производительноть .NET миф или реальность? |
batyrmastyr писал(а): Штирлиц писал(а): Вроде бы даже в последнюю версию C# должны войти конструкции типа SQL. Вопрос - зачем это надо в C#, когда есть язык SQL прекрасно справляющийся с возложенными на него функциями? Как зачем? тут же С++ 2009 должен выйти. Стало быть тот у кого стандарт толще -тот и круче. Вот и "набивают вес". Надо подкинуть им идею включить PL/1 как подмножество. ![]() Да-а... Бабло завсегда победит зло... И чего мы тут мучаемся, за какие-то немаркетинговые идеи держимся? ![]() |
Автор: | ScrollLock [ Суббота, 03 Ноябрь, 2007 01:15 ] |
Заголовок сообщения: | Re: Статья Производительноть .NET миф или реальность? |
Да ладно, NET не так уж прожорлив. Я часто работаю с MATLAB, так там откомпилированный HELLO, WORLD тянет за собой 140 мегов библиотек и сходу берёт на себя 50 мегов оперативной памяти. Цитата: Хочу отметить, что разница в языковых конструкциях действительно дает преимущество C#? но если вы решаете действительно сложную задачу, где используется сложные алгоритмы и где производительность имеет первостепенную важность, тогда разница между С++ и C# минимальна... При написании сложных алгоритмов надёжность и наглядность обычно важнее производительности и объёма оперативной памяти (главное ведь чтобы работал правильно, а быстрота - дело наживное). Ради своего удобства не жалко сотен мегабайт памяти (MATLAB), если надо будет быстро - можно переписать отдельные критичные куски кода на Си или Фортран. Человеческий труд тоже денег стоит, бывает проще и дешевле потратиться на "железо". |
Автор: | Штирлиц [ Среда, 14 Ноябрь, 2007 10:45 ] |
Заголовок сообщения: | Re: Статья Производительноть .NET миф или реальность? |
Появилась ссылка на саму статью http://www.gotdotnet.ru/LearnDotNet/CSharp/513899.aspx |
Автор: | PGR [ Среда, 14 Ноябрь, 2007 17:04 ] |
Заголовок сообщения: | Re: Статья Производительноть .NET миф или реальность? |
Штирлиц писал(а): В этой статье еще приводится несколько примеров на основе C# и введенных в язык полезностей типа foreach. А вот в Питоне более высокоуровневый for (аналог шарповского foreach) работает быстрее... Штирлиц писал(а): "... чем более высокоуровневая конструкция, тем меньше ее область применения" И тем более оптимально её можно реализовать в языке. Почему в C# это не так? |
Автор: | Darksnake [ Пятница, 16 Ноябрь, 2007 09:57 ] |
Заголовок сообщения: | Re: Статья Производительноть .NET миф или реальность? |
Да.... это конечно не в тему, но все же. Возможности оптимизации я помнится в полной мере осознал как это не удивительно на компьютерной игрушке. Оказалось, что когда на довольно старой игре пользователи позаменяли все текстуры и модели - графика там оказалась на уровне вполне современных экземпляров, а системные требования соответственно на два порядка ниже. Это могло означать только одно - создатели просто леняться прорабатывать детали и пытаются все это спихнуть на встроенные системы видеокарты и рессурсы компа. Немного поразмышляв на эту тему я пришел к выводу, что им так даже выгоднее. В конце концов, качество фильма у нас поределяют по его стоимости, так почему бы качество програмного продукта не определять по его системным требованиям. Я думаю, что дело не только в том, что руки растут откуда-то не от туда, а в том, что их оттуда активно выращивают. Наверное любой крупный продукт на сегодня - начиная от тех самых игр и кончая мощными базами для разработки ПО типа Delphi, если примитивно отловить глюки и соптимизировать по человечески, то скорость работы возрастет в разы, а то и на порядки. |
Автор: | Info21 [ Пятница, 16 Ноябрь, 2007 11:12 ] |
Заголовок сообщения: | Re: Статья Производительноть .NET миф или реальность? |
Darksnake писал(а): ... В конце концов, качество фильма у нас поределяют по его стоимости, так почему бы качество програмного продукта не определять по его системным требованиям. Я думаю, что дело не только в том, что руки растут откуда-то не от туда, а в том, что их оттуда активно выращивают. ... Не столько выращивают, сколько поощряют примитивное восприятие -- известно, что дети до 5 лет определяют количество воды в сосуде просто по высоте. С прог. продуктами гораздо сложнее, а народу заморачиваться не хочется... |
Автор: | Борис Рюмшин [ Воскресенье, 18 Ноябрь, 2007 13:52 ] |
Заголовок сообщения: | Re: Статья Производительноть .NET миф или реальность? |
Darksnake писал(а): Я думаю, что дело не только в том, что руки растут откуда-то не от туда, а в том, что их оттуда активно выращивают. Это прямо афоризм получился... ![]() |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |