|
Элегантные решения
|
|||
---|---|---|---|
#18+
Приветствую всех. Хочу в данном топике поспрашивать о реализации некоторых алгоритмов, которые, как мне кажется, можно решить более элегантно. Например, надо сравнить массив из 4 байт с массивом, заполненным нулями. Код: c# 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 13:54 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
saxixПриветствую всех. Хочу в данном топике поспрашивать о реализации некоторых алгоритмов, которые, как мне кажется, можно решить более элегантно. Например, надо сравнить массив из 4 байт с массивом, заполненным нулями. Код: c# 1. 2. 3. 4. 5.
Как вариант...проверки Код: c# 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 13:58 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
saxix, Вы ни алгоритм не описали, ни то, зачем он нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 14:06 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
skyANAsaxix, Вы ни алгоритм не описали, ни то, зачем он нужен. Я привел для примера. А данных кусок кода ...для проверки, изменилось ли "содержание" массива после его инициализации ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 14:09 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
saxixskyANAsaxix, Вы ни алгоритм не описали, ни то, зачем он нужен. Я привел для примера.То есть Вы предлагаете обсуждать алгоритмы без их описания и реальных вариантов использования? P.S.: а касательно сравнения массива байт, все варианты уже собраны и легко гуглятся: Comparing two byte arrays in .NET . ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 14:15 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
saxixНапример, надо сравнить массив из 4 байт с массивом, заполненным нулями. Например, Код: plaintext
или, что логичнее, Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 15:55 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
Нахлобуч, завтра массив будет инициализироваться числами Фибоначи, нужно более "элегантное" решение :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 16:07 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 17:22 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
cdtyjv, ты еще ассемблерные вставки на дельфи предложи с референсированием DLL. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 17:30 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
codearticles.ru, Очень сложно придумать что-то более элегантнее моего варианта. Никаких циклов, никакой грязи, просто сравниваем участок памяти с нулем. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 18:07 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
Свеном, ТС в итоге сформулировал задачу так: "изменилось ли "содержание" массива после его инициализации". То есть в общем случае надо сравнивать не с нулём, а с неким начальным состоянием. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 18:25 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
cdtyjvОчень сложно придумать что-то более элегантнее моего варианта. Никаких циклов, никакой грязи, просто сравниваем участок памяти с нулем.Разве что сборка будет помечена "Allow Unsafe Code", и доверия к ней не будет никакого. И кому она такая нужна? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 08:25 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
Лучше скажите, есть ли где-нибудь достаточно обширный список решений, разбитый по классам задачь. А то надо что-то - либо отвлекаешь занятых людей на ПТ своими вопросами, либо МСДН перелопачиваешь. А новичкам полезно иметь список "еслишь хочешь то-то - надо делать так". Например, задача "Producer-Consumer" - решать с помощью таких-то классов, краткий пример кода с использованием TPL, "по-старинке" и ещё что-нибудь экзотическое. А то в этом дотнете уже столько устаревших классов и подходов, которые сохраняются только из-за легаси, что новичку трудно разобраться, как решать задачу на такой-то версии фреймворка. Он видит три разных подхода, и не знает, что выбрать. Даже не знает, заменяет ли один подход другой (т. е., типа, подход на старой версии фреймворка и улучшенный подход на новой) или это непересекающиеся подходы для разных условий. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 09:17 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
авторНапример, задача "Producer-Consumer" Это я сейчас не помощи по этой задаче попросил, а просто в качестве примера привёл. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 09:18 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
НемоКэп42, на лекции и семинары по параллельным вычислениям ходить надо было! :) Но никогда не поздно: Параллельные вычисления и многопоточное программирование . ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 09:29 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
Алексей КРазве что сборка будет помечена "Allow Unsafe Code", и доверия к ней не будет никакого. И кому она такая нужна?Чушь не надо пороть. unsafe к доверию не имеет никакого отношения. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 09:38 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
cdtyjvАлексей КРазве что сборка будет помечена "Allow Unsafe Code", и доверия к ней не будет никакого. И кому она такая нужна?Чушь не надо пороть. unsafe к доверию не имеет никакого отношения.К доверию с моей стороны unsafe имеет прямое отношение. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 10:44 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
Алексей К, Как же вы тогда используете стандартные кламсы, там же ансейф на ансейфе сидит? К счастью, ваше глупое отношение к ансейфу никак не сказывается на спрос на продукты, которые его используют. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 11:10 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
cdtyjvАлексей К, Как же вы тогда используете стандартные кламсы, там же ансейф на ансейфе сидит? К счастью, ваше глупое отношение к ансейфу никак не сказывается на спрос на продукты, которые его используют.В моём случае надёжность важнее чем производительность. Ты потом поймёшь, что это означает. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 12:13 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
cdtyjv Код: c# 1. 2. 3. 4. 5. 6.
Красивое, но непрактичное. Во-первых, только один частный случай проверки на ноль, причем очень специфический - именно массив из 4 байт и именно сравнение на 0. Во-вторых, красоту этого решения может оценить только человек, знающий с++, что совершенно ненужным образом ограничивает компетенции разработчика (увы, свеном, не все являются экспертами сразу по трем языкам). В-третьих, требует Allow Unsafe Code, что для банальной проверки массива, причем очень частным случаем, явно излишне. В общем, в unsafe ничего плохого нет, но не на такой же ерунде. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 12:26 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
Arm79Во-вторых, красоту этого решения может оценить только человек, знающий с++, что совершенно ненужным образом ограничивает компетенции разработчика.C++ должны знать все. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 12:43 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
Алексей КArm79Во-вторых, красоту этого решения может оценить только человек, знающий с++, что совершенно ненужным образом ограничивает компетенции разработчика.C++ должны знать все. Увы, я знаю только основы :-) Ни разу не возникала необходимость его использования. Кстати, про перфоманс в C#: http://habrahabr.ru/post/165729/ Достаточно интересная статья, хотя примеры оптимизированного кода ломают глаз и выносят мозг. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 13:00 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
Arm79Алексей Кпропущено... C++ должны знать все. Увы, я знаю только основы :-) Ни разу не возникала необходимость его использования. Кстати, про перфоманс в C#: http://habrahabr.ru/post/165729/ Достаточно интересная статья, хотя примеры оптимизированного кода ломают глаз и выносят мозг. Статью Свеном написал. И по комментам сразу понятно. )) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 13:28 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
А ваще, в статье даже нет замены всех умножений и делений на 2 байтовыми сдвигами и прочими такими "оптимизациями". Ещё понравилась ветка http://habrahabr.ru/post/165729/#comment_5748857 Видел повсеместную расстановку null'ов руками в паттерне Dispose. Т. е. вызывается Dispose() для объекта, а потом ему null присваивается. По-моему, при таких требованиях к оптимизации и скорости кода (выжимаем процентики производительности) лучше писать на С/С++. А ещё лучше - сразу на ассемблере. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 13:32 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
А вообще, скажите, что дешевле - посадить пару человек на зарплату по 150 килорублей каждого, чтобы они код проекта вот так вот заоптимизировали за год, или купить ещё один Ксеон, пару плашек оперативы и оплачивать чуть бОльшие счета за электричество? По-моему, если нужна производительность, то надо использовать подходящий для этого инструмент. C#'пы и джавы всякие явно не для этого. А попытки выточить напильником из паровоза феррари, да ещё заставить полученное ездить так же быстро - только напрасная трата ресурсов. Хотя, конечно, можно гордиться личным достижением - смог, мол. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 13:55 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
user7320А вообще, скажите, что дешевле - посадить пару человек на зарплату по 150 килорублей каждого, чтобы они код проекта вот так вот заоптимизировали за год, или купить ещё один Ксеон, пару плашек оперативы и оплачивать чуть бОльшие счета за электричество? Несопоставимо. Если есть алгоритм, который на C# работает условно 1 секунду, а на С++ 0.2 секунды, то покупка дополнительного железа никак не ускорит работу алгоритма. Например, ЭЦП. user7320По-моему, если нужна производительность, то надо использовать подходящий для этого инструмент Точно. user7320C#'пы и джавы всякие явно не для этого Серьезное заблуждение. HFT очень часто делают на Java (см. вакансии ДойчеБанка). К тому же понятие "производительность" очень обманчиво. Более правильно говорить про выбор инструмента, реализующего какую-то логику в пределах заданных рамок, в т.ч. и временнЫх. Далее, иногда накладные расходы на поддержание и интеграцию разных ЯП и платформ больше, чем выигрыш по производительности. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 14:03 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
user7320А вообще, скажите, что дешевле - посадить пару человек на зарплату по 150 килорублей каждого, чтобы они код проекта вот так вот заоптимизировали за год, или купить ещё один Ксеон, пару плашек оперативы и оплачивать чуть бОльшие счета за электричество?У нас на проекте расходы на разработку больше, чем расходы на инфраструктуру. Да и люди платят деньги не за то, что приложение с ростом клиентов, данных и трафика, работает на том же железе. Посчитайте сколько вы за год денег НЕ заработаете, если будете заниматься оптимизацией. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 14:13 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
skyANA, Arm79, я с вами согласен. Главное, чтобы можно было быстро и точно выяснять узкие места, когда приспичит. Тогда и соптимизировать можно. А если битики руками сдвигают и наллы присваивают только потому, что "я крутой праграмист, а вы все казлы!" - лучше уволить такого работника. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 14:19 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
Вот встречаю я присвоение наллу после Dispose(). Если бы его не было - я бы дальше пошёл кодить не задумываясь. А теперь я долго думаю - нафига здесь ЭТО? Гуглю, читаю, иду к написавшего ЭТО и спорю с ним, выясняю. И если таких моментов - каждый второй в коде этого умника, а задача мегаоптимизаций не стоит, то что делать в этом случае? Особенно, если этот умник говорит "RTFM faggot, мне некогда тут студней азам учить!". ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 14:24 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
user7320А ваще, в статье даже нет замены всех умножений и делений на 2 байтовыми сдвигами и прочими такими "оптимизациями". с этим давно справляются компиляторы. и не только на степень двойки можно умножать хитрожопым образом - lea eax,[eax+eax*4] например для x86 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 17:23 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
user7320, авторВот встречаю я присвоение наллу после Dispose(). а какая взаимосвязь null и Dispose?, Dispose - обыкновенный метод ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 23:00 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
user7320Вот встречаю я присвоение наллу после Dispose() Дык - помощь сборщику, почему нет? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 23:06 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
user7320А теперь я долго думаю - нафига здесь ЭТО?Додумался, али подсказать? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 23:08 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
Pallaris Дык - помощь сборщику, почему нет? Сборщику иначе нужно помогать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 14:55 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
ЕвгенийВPallarisДык - помощь сборщику, почему нет? Сборщику иначе нужно помогать.? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 15:49 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
skyANA, Присваивать или не присваивать null, от этого мало толка, GC и без этого эффективно найдет недостижимые объекты. ИХМО нужно делать так, что бы GC работал как можно меньше, т. е. не создавать без объекты там, где без этого можно обойтись. P. S. интересно, что первая версия GC была написана на LISP, а потом оттранслирована в C++. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 16:16 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
ЕвгенийВskyANA, Присваивать или не присваивать null, от этого мало толка, GC и без этого эффективно найдет недостижимые объекты. ИХМО нужно делать так, что бы GC работал как можно меньше, т. е. не создавать без объекты там, где без этого можно обойтись. P. S. интересно, что первая версия GC была написана на LISP, а потом оттранслирована в C++.Что-то как-то не о том. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 17:24 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
Был создан нужный объект, он отработал своё, прибит, предварительно освободив использованные неуправляемые ресурсы. Что значит "не создавать"? А работу, кто будет работать? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 17:27 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
ЕвгенийВskyANA, Присваивать или не присваивать null, от этого мало толка, GC и без этого эффективно найдет недостижимые объекты. Прохладная история. Чем меньше живых ссылок на объект, тем лучше для сборщика. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2014, 21:36 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
PallarisПрохладная история. Чем меньше живых ссылок на объект, тем лучше для сборщика. ему это глубоко фиолетово ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2014, 23:10 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
skyANAБыл создан нужный объект, он отработал своё, прибит, предварительно освободив использованные неуправляемые ресурсы. Что значит "не создавать"? А работу, кто будет работать? скайана, тут имеют ввиду, что надо стремиться создавать меньеш объектов, если это возможно. GC в .Net работает отвратительно, поэтому, в отличие от той же Java, здесь реально надо париться над этим. Что есть, то есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2014, 23:36 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
Изопропилему это глубоко фиолетово Внезапно... Ну хорошо - ссылке не был присвоен нул, объект ушел во второе поколение - кому от этого стало лучше? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2014, 23:36 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
PallarisВнезапно... Ну хорошо - ссылке не был присвоен нул, объект ушел во второе поколение - кому от этого стало лучше?В большинстве случаев, если вы начинаете чистку ресурсов какого-то объекта, то он и сам вот-вот будет собран GC. Как в примере выше - вы вызвали некий Stop(), что скорее всего означает, что вы заканчиваете работать с этим объектом, и с его кишками. Если это так - то ничего обнулять не надо, это маразм. Если же с этим объектом планируется дальнейшая работа, то да - хорошо бы его кишки обнулить. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2014, 23:39 |
|
Элегантные решения
|
|||
---|---|---|---|
#18+
cdtyjvskyANAБыл создан нужный объект, он отработал своё, прибит, предварительно освободив использованные неуправляемые ресурсы. Что значит "не создавать"? А работу, кто будет работать? скайана, тут имеют ввиду, что надо стремиться создавать меньеш объектов, если это возможно. GC в .Net работает отвратительно, поэтому, в отличие от той же Java, здесь реально надо париться над этим. Что есть, то есть.Это я понял, но вопрос-то у user7320 был не в этом :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2014, 00:06 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1402374]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 160ms |
0 / 0 |