tag:blogger.com,1999:blog-8596733192274108952.post8702404701125427349..comments2024-03-12T06:00:18.305+02:00Comments on Programming stuff: О сомнительных советах об эффективностиSergey Teplyakovhttp://www.blogger.com/profile/14300835272589262297noreply@blogger.comBlogger47125tag:blogger.com,1999:blog-8596733192274108952.post-20243205158321971062016-09-10T05:59:42.522+03:002016-09-10T05:59:42.522+03:00thanks for sharing.
regars
clipping path servicesthanks for sharing.<br />regars<br /><a href="http://expertclipping.com" rel="nofollow">clipping path services</a>Shahadot islamhttps://www.blogger.com/profile/01593156590447944713noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-47203764274992711212016-06-18T08:59:55.175+03:002016-06-18T08:59:55.175+03:00english version please
what is programmingenglish version please<br /><a href="http://www.computerprogrammingtutorial.com" rel="nofollow">what is programming</a>Anonymoushttps://www.blogger.com/profile/03935684730839549995noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-24871142174338819962016-06-09T09:59:27.490+03:002016-06-09T09:59:27.490+03:00Судя по данному коду (детально не вчитывался), над...Судя по данному коду (детально не вчитывался), надо было вообще заморочиться на тему Dictionary для _cornerMap с Key, для того чтобы избегать вложенных циклов и время поиска там должно стать околонулевым. Но это, конечно, очень беглый взгляд и надо проверять/смотреть детальнее.zloy denhttps://www.blogger.com/profile/06757705001123731799noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-43181867406175497162016-06-08T21:48:26.345+03:002016-06-08T21:48:26.345+03:00Сергей то, что я хотел сказать, только более подро...Сергей то, что я хотел сказать, только более подробно! Спасибо! С формулировкой об оценки стоимости изменений "потом" не сталкивался, возьму на вооружение.<br /><br />Что касается конкретного примера, кроме того, что сказал Сергей, мне вообще не очень нравится эта мотивация - "что если изменится тип переменных?". Как часто в вашем опыте случалось, чтобы тип переменных менялся после "фиксации" кода? В моем - буквально пару раз всего, и в каждом случае, мне было важно просмотреть те места, где код перестал компилироваться - поскольку там как раз изменилась семантика - собственно то, о чем Сергей и сказал.<br /><br />Этой же фразой мотивируют и использование var вместо конкретных значений типов переменных сквозь весь код. Не хотелось бы разжигать холивар, но это же полный финиш!<br /><br />Кстати, наши с Сергеем комментарии еще раз подчеркивают фразу Михаила - "С гранью реально сложный вопрос".Mikhail Barghttps://www.blogger.com/profile/13610769544208096841noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-19934332176481416262016-06-08T19:35:15.596+03:002016-06-08T19:35:15.596+03:00Михаил, в проектировании и управлении проектами ес...Михаил, в проектировании и управлении проектами есть такой подход: нужно оценивать стоимость некоторого изменения в случае изменения требований сейчас и когда они произойдут. И если стоимость изменения сейчас значительно ниже изменения потом, то изменение нужно делать заблаговременно (поэтому нужно продумывать ключевые архитектурные решения, поскольку стоимость изменения будет высоким).<br /><br />В этом же случае, стоимость изменения сейчас и через год - одна и та же. Если список станет IEnumerable, то код перестанет компилироваться и вы внесете изменение. Но ведь вполне вероятно, что этого никогда и не произйдет (ведь будущее предвидеть мы не можем). И в этом случае мы будем жить с более эффективным и простым решением все время жизни проекта.Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-85486078659755452972016-06-08T16:41:57.883+03:002016-06-08T16:41:57.883+03:00С гранью реально сложный вопрос
Вот ваш пример: &q...С гранью реально сложный вопрос<br />Вот ваш пример: "Или использовать list.Count() вместо list.Count."<br />А что если лист превратится в IEnumerable? В первом случае не придется переписывать код, а во втором придется.Anonymoushttps://www.blogger.com/profile/17055902000598427614noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-20998140345795476872016-06-06T16:56:40.339+03:002016-06-06T16:56:40.339+03:00Ага, все, разобрался. Забыл, что '==' для ...Ага, все, разобрался. Забыл, что '==' для делегатов переопределен. Заменил на 'Object.ReferenceEquals' - получил разное.Ivan Danilovhttps://www.blogger.com/profile/17733952955836067788noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-35670947438764344252016-06-06T16:52:34.653+03:002016-06-06T16:52:34.653+03:00Ради интереса проверил: разницы между 'Process...Ради интереса проверил: разницы между 'ProcessNode' как method group и '(n) => ProcessNode(n)' нет никакой, в обоих случаях компилятор возвращает один и тот же объект.<br />Тестировал вот так: https://gist.github.com/ivan-danilov/70f09edada47a28d86bab5f35ec6db2b на Розлине, .NET 4.6.1. Release/Debug и наличие или отсутствие дебаггера ничего не меняют.<br />ЧЯДНТ?Ivan Danilovhttps://www.blogger.com/profile/17733952955836067788noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-15805606492860393472016-06-06T14:36:30.197+03:002016-06-06T14:36:30.197+03:00visit us http://www.stackoverflow.info/visit us http://www.stackoverflow.info/Anonymoushttps://www.blogger.com/profile/00962069622504243950noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-41762145888312549802016-06-06T05:23:34.521+03:002016-06-06T05:23:34.521+03:00Максим, пример этот синтетический. В оригинале это...Максим, пример этот синтетический. В оригинале этот же делегат потом передается в рекурсивный вызов, так что он нужен именно в виде делегата.Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-90838126840165682302016-06-06T05:19:08.283+03:002016-06-06T05:19:08.283+03:00Сергей, поясни пожалуйста, зачем в проблеме #2 нуж...Сергей, поясни пожалуйста, зачем в проблеме #2 нужно вообще использовать делегат, почему нельзя напрямую вызывать ProcessNode?Максимhttps://www.blogger.com/profile/05347295835473018827noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-89436627224935179872016-06-05T21:29:19.958+03:002016-06-05T21:29:19.958+03:00@А что мешает обходить возвращаемый массивы фориче...@А что мешает обходить возвращаемый массивы форичем? Мерили? Прозводительность сильно хуже фора!?@<br />А еще лучше давайте представим себе эту ситуацию:<br />Я возвращаю массив структур. Для того, чтобы вернуть я делаю его первоначальный перебор а значит копию, затем я foreach (struct str in structsArray) { } снова копирую ее в каждой итерации.<br /><br />Представим себе другую ситуацию: <br />Я имею массив структур размером 30 байт (ну мало ли вот так получилось, что структуры такие большие, см. к примеру исходники Entry в стандартной реализации Dictionary) и мне нужно провести чтение переменной из каждой и некую простую операцию:<br />foreach(struct str in structArray) { делаем что то } я снова каждую итерацию копирую структуру, а если их миллион - получу 30 мб memory traffic.<br />А for-ом, поскольку чтение идет из массива лишних копий создаваться не будет.Anonymoushttps://www.blogger.com/profile/15776483015416226815noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-23517257517143300052016-06-05T20:18:22.831+03:002016-06-05T20:18:22.831+03:00Я лишь высказал мнение, что стараюсь его избегать ...Я лишь высказал мнение, что стараюсь его избегать исходя из своих собственных тестов и тех неэффективных реализации IEnumerators, что я видел и не в коем случае не настаиваю придерживаться его.<br /><br />Не везде есть возможность избежать его использования, а в некоторых случаях действительно проще использовать foreach.<br /><br />В качестве дополнения, for банально удобнее при отладке: допустим у вас есть цикл и в теле цикла с определенной вероятностью вылетают ошибки. Для того чтобы понять вероятное место и стабильность вылетов в foreach вам необходимо будет вводить дополнительную переменную текущей итерации - мелочь, но после отладки про нее можно банально забыть и этот баласт так и будет висеть в теле, что нарушит чистоту кода. <br />А если вам нужно добавить дополнительное условие итерации - будете еще тонну условий в тело пихать ?<br />А если вдруг вас осенит новая идея и вы решите изменить порядок итерации на обратный или с середины - будете переписывать на for или создавать кучу выражений :)? <br /><br />На самом деле вы можете использовать любой способ на свое усмотрение, главное чтобы вам и тем кто работает с вашим кодом было комфортно.<br />Лично мне удобнее когда в гардеробе одинаковые "костюмы", чем тратить время на выбор подходящей одежды для каждого случая :).Anonymoushttps://www.blogger.com/profile/15776483015416226815noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-88078785606586105852016-06-05T19:27:12.128+03:002016-06-05T19:27:12.128+03:00Этот комментарий был удален автором.Anonymoushttps://www.blogger.com/profile/15776483015416226815noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-77476205029427481952016-06-05T18:33:21.043+03:002016-06-05T18:33:21.043+03:00А что мешает обходить возвращаемый массивы форичем...А что мешает обходить возвращаемый массивы форичем? Мерили? Прозводительность сильно хуже фора!?Anonymoushttps://www.blogger.com/profile/11725153141467656623noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-62253128545669055842016-06-05T03:38:32.414+03:002016-06-05T03:38:32.414+03:00Спасибо, посмотрю на код.
Ну, смысл в том, что тел...Спасибо, посмотрю на код.<br />Ну, смысл в том, что тело цикла выполняется заведомо значительно дольше, что делает подобную оптимизацию видимой лишь в бенчмарках, кои бывают чаще вредными, чем полезными.Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-2168746256365504832016-06-05T03:37:18.347+03:002016-06-05T03:37:18.347+03:00Знал бы как это сделать:(. Я чего-то думаю, что эт...Знал бы как это сделать:(. Я чего-то думаю, что эта фича должна быть доступна в движке блоггера, хотя может быть это где-то настроить и можно...Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-5182068178757413232016-06-05T02:36:44.483+03:002016-06-05T02:36:44.483+03:00Пруф в открытом доступе, пользуйтесь коль сочтете ...Пруф в открытом доступе, пользуйтесь коль сочтете полезным. <br />https://github.com/LuchunPen/Fast-Hash-Collection<br /><br />И не совсем понятно, при чем тут работа тела цикла. Я соглашусь, что нет никакой разницы что использовать foreach или for или вообще собственную в 10 раз более медленную реализацию, если тело цикла отрабатывает со скорость 100 операций в секунду. Но на быстрых одно-двух строчных операциях прирост заметен.<br /><br />У меня есть два варианта: вы работаете над очень специфическим проектом или вы делаете что-то не то.<br />Вы правы, я пилю свой воксельный движок и для меня вопрос скорости доступа и обработки весьма критичен, поэтому приходится тестировать на производительность все используемые инструменты и писать свои в случае если не удовлетворяют требованиям по производительности и функционалу.Anonymoushttps://www.blogger.com/profile/15776483015416226815noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-31704234487193092632016-06-05T02:26:34.990+03:002016-06-05T02:26:34.990+03:00Этот комментарий был удален автором.Anonymoushttps://www.blogger.com/profile/15776483015416226815noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-60721933671332494222016-06-05T02:19:29.654+03:002016-06-05T02:19:29.654+03:00Пожелание. Внесите пожалуйста возможность редактир...Пожелание. Внесите пожалуйста возможность редактирования сообщения, а то появляется мысль, а чтоб дополнить приходится удалять и отправлять новый комментарий :). Anonymoushttps://www.blogger.com/profile/15776483015416226815noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-47831326180833775662016-06-05T02:17:03.909+03:002016-06-05T02:17:03.909+03:00Я все примеры не упомню уже. Вот пример последней ...Я все примеры не упомню уже. Вот пример последней из правок.<br />Исходник<br />https://github.com/staff0rd/polygon-map-unity/blob/master/demo/Assets/Map/Graph.cs<br />С 207 по 216 строку алгоритм выборки узла<br />переписан на обычный for с прямым сравнением ключа и индекса сократило общее время отработки построения карты с 550 до 400 млс, а это только одно место. Как вы понимаете на сопровождении кода это не отразилось ровным счетом никак (1 строчка запроса заменилась циклом и сравнением). В общей сложности внеся еще некоторые правки я ускорил общее построение в 4 раза. <br />А потом в итоге плюнул и написал свою менее универсальную, но более прозрачную и простую реализацию построения подобной карты со схожим функционалом где нет ни одного LINQ запроса которая отрабатывает всего за 14 млс. Естественно что дело не только в LINQ, но в правильных алгоритмах.Anonymoushttps://www.blogger.com/profile/15776483015416226815noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-40448385090679131712016-06-05T02:13:48.760+03:002016-06-05T02:13:48.760+03:00Этот комментарий был удален автором.Anonymoushttps://www.blogger.com/profile/15776483015416226815noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-54369730573406978462016-06-05T01:41:04.593+03:002016-06-05T01:41:04.593+03:00Этот комментарий был удален автором.Anonymoushttps://www.blogger.com/profile/15776483015416226815noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-7929405913285576082016-06-05T01:34:43.760+03:002016-06-05T01:34:43.760+03:00Этот комментарий был удален автором.Anonymoushttps://www.blogger.com/profile/15776483015416226815noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-28841659590877063132016-06-05T00:08:35.226+03:002016-06-05T00:08:35.226+03:00У меня есть два варианта: вы работаете над очень с...У меня есть два варианта: вы работаете над очень специфическим проектом или вы делаете что-то не то.<br /><br />Я сейчас занимаюсь тулой, которая является тулой системного уровня и в ней я не вижу выгод от подобных микрооптимизаций.<br /><br />З.Ы. Я был бы рад увидеть пруф последнего заявления, поскольку он мне кажется очень подозрительным и не логичным (если только вы не меряете время самого перебора, без учета работы тела цикла).Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.com