powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Элегантные решения
44 сообщений из 44, показаны все 2 страниц
Элегантные решения
    #38770403
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую всех. Хочу в данном топике поспрашивать о реализации некоторых алгоритмов, которые, как мне кажется, можно решить более элегантно.
Например, надо сравнить массив из 4 байт с массивом, заполненным нулями.

Код: c#
1.
2.
3.
4.
5.
byte[] code = new byte[4];
//Заполнение code
if (!code.SequenceEqual(new byte[] { 0x00, 0x00, 0x00, 0x00 }))
{
}
...
Рейтинг: 0 / 0
Элегантные решения
    #38770410
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxixПриветствую всех. Хочу в данном топике поспрашивать о реализации некоторых алгоритмов, которые, как мне кажется, можно решить более элегантно.
Например, надо сравнить массив из 4 байт с массивом, заполненным нулями.

Код: c#
1.
2.
3.
4.
5.
byte[] code = new byte[4];
//Заполнение code
if (!code.SequenceEqual(new byte[] { 0x00, 0x00, 0x00, 0x00 }))
{
}



Как вариант...проверки
Код: c#
1.
2.
3.
4.
5.
byte[] code = new byte[4];
 //Заполнение code
if (!code.SequenceEqual(new byte[code.Length]))
{
}
...
Рейтинг: 0 / 0
Элегантные решения
    #38770421
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxix, Вы ни алгоритм не описали, ни то, зачем он нужен.
...
Рейтинг: 0 / 0
Элегантные решения
    #38770425
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAsaxix, Вы ни алгоритм не описали, ни то, зачем он нужен.
Я привел для примера.
А данных кусок кода ...для проверки, изменилось ли "содержание" массива после его инициализации
...
Рейтинг: 0 / 0
Элегантные решения
    #38770440
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxixskyANAsaxix, Вы ни алгоритм не описали, ни то, зачем он нужен.
Я привел для примера.То есть Вы предлагаете обсуждать алгоритмы без их описания и реальных вариантов использования?

P.S.: а касательно сравнения массива байт, все варианты уже собраны и легко гуглятся: Comparing two byte arrays in .NET .
...
Рейтинг: 0 / 0
Элегантные решения
    #38770601
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxixНапример, надо сравнить массив из 4 байт с массивом, заполненным нулями.
Например,

Код: plaintext
if(!code.All(b => b == 0))

или, что логичнее,

Код: plaintext
if(code.Any(b => b != 0))
...
Рейтинг: 0 / 0
Элегантные решения
    #38770617
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нахлобуч, завтра массив будет инициализироваться числами Фибоначи, нужно более "элегантное" решение :)
...
Рейтинг: 0 / 0
Элегантные решения
    #38770722
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
byte[] arr = ...

fixed (byte* b = arr)  
{
    return &((int*)b) == 0;
}
...
Рейтинг: 0 / 0
Элегантные решения
    #38770734
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cdtyjv, ты еще ассемблерные вставки на дельфи предложи с референсированием DLL.
...
Рейтинг: 0 / 0
Элегантные решения
    #38770779
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru,
Очень сложно придумать что-то более элегантнее моего варианта. Никаких циклов, никакой грязи, просто сравниваем участок памяти с нулем.
...
Рейтинг: 0 / 0
Элегантные решения
    #38770806
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Свеном, ТС в итоге сформулировал задачу так: "изменилось ли "содержание" массива после его инициализации".

То есть в общем случае надо сравнивать не с нулём, а с неким начальным состоянием.
...
Рейтинг: 0 / 0
Элегантные решения
    #38771143
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvОчень сложно придумать что-то более элегантнее моего варианта. Никаких циклов, никакой грязи, просто сравниваем участок памяти с нулем.Разве что сборка будет помечена "Allow Unsafe Code", и доверия к ней не будет никакого. И кому она такая нужна?
...
Рейтинг: 0 / 0
Элегантные решения
    #38771194
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше скажите, есть ли где-нибудь достаточно обширный список решений, разбитый по классам задачь. А то надо что-то - либо отвлекаешь занятых людей на ПТ своими вопросами, либо МСДН перелопачиваешь. А новичкам полезно иметь список "еслишь хочешь то-то - надо делать так".

Например, задача "Producer-Consumer" - решать с помощью таких-то классов, краткий пример кода с использованием TPL, "по-старинке" и ещё что-нибудь экзотическое.

А то в этом дотнете уже столько устаревших классов и подходов, которые сохраняются только из-за легаси, что новичку трудно разобраться, как решать задачу на такой-то версии фреймворка. Он видит три разных подхода, и не знает, что выбрать. Даже не знает, заменяет ли один подход другой (т. е., типа, подход на старой версии фреймворка и улучшенный подход на новой) или это непересекающиеся подходы для разных условий.
...
Рейтинг: 0 / 0
Элегантные решения
    #38771196
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНапример, задача "Producer-Consumer"
Это я сейчас не помощи по этой задаче попросил, а просто в качестве примера привёл.
...
Рейтинг: 0 / 0
Элегантные решения
    #38771205
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42, на лекции и семинары по параллельным вычислениям ходить надо было! :)

Но никогда не поздно: Параллельные вычисления и многопоточное программирование .
...
Рейтинг: 0 / 0
Элегантные решения
    #38771217
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КРазве что сборка будет помечена "Allow Unsafe Code", и доверия к ней не будет никакого. И кому она такая нужна?Чушь не надо пороть. unsafe к доверию не имеет никакого отношения.
...
Рейтинг: 0 / 0
Элегантные решения
    #38771322
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvАлексей КРазве что сборка будет помечена "Allow Unsafe Code", и доверия к ней не будет никакого. И кому она такая нужна?Чушь не надо пороть. unsafe к доверию не имеет никакого отношения.К доверию с моей стороны unsafe имеет прямое отношение.
...
Рейтинг: 0 / 0
Элегантные решения
    #38771365
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,
Как же вы тогда используете стандартные кламсы, там же ансейф на ансейфе сидит?

К счастью, ваше глупое отношение к ансейфу никак не сказывается на спрос на продукты, которые его используют.
...
Рейтинг: 0 / 0
Элегантные решения
    #38771499
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvАлексей К,
Как же вы тогда используете стандартные кламсы, там же ансейф на ансейфе сидит?

К счастью, ваше глупое отношение к ансейфу никак не сказывается на спрос на продукты, которые его используют.В моём случае надёжность важнее чем производительность. Ты потом поймёшь, что это означает.
...
Рейтинг: 0 / 0
Элегантные решения
    #38771516
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjv
Код: c#
1.
2.
3.
4.
5.
6.
byte[] arr = ...

fixed (byte* b = arr)  
{
    return &((int*)b) == 0;
}



Красивое, но непрактичное.

Во-первых, только один частный случай проверки на ноль, причем очень специфический - именно массив из 4 байт и именно сравнение на 0.
Во-вторых, красоту этого решения может оценить только человек, знающий с++, что совершенно ненужным образом ограничивает компетенции разработчика (увы, свеном, не все являются экспертами сразу по трем языкам).
В-третьих, требует Allow Unsafe Code, что для банальной проверки массива, причем очень частным случаем, явно излишне.

В общем, в unsafe ничего плохого нет, но не на такой же ерунде.
...
Рейтинг: 0 / 0
Элегантные решения
    #38771542
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Во-вторых, красоту этого решения может оценить только человек, знающий с++, что совершенно ненужным образом ограничивает компетенции разработчика.C++ должны знать все.
...
Рейтинг: 0 / 0
Элегантные решения
    #38771573
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КArm79Во-вторых, красоту этого решения может оценить только человек, знающий с++, что совершенно ненужным образом ограничивает компетенции разработчика.C++ должны знать все.
Увы, я знаю только основы :-) Ни разу не возникала необходимость его использования.

Кстати, про перфоманс в C#: http://habrahabr.ru/post/165729/
Достаточно интересная статья, хотя примеры оптимизированного кода ломают глаз и выносят мозг.
...
Рейтинг: 0 / 0
Элегантные решения
    #38771632
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Алексей Кпропущено...
C++ должны знать все.
Увы, я знаю только основы :-) Ни разу не возникала необходимость его использования.

Кстати, про перфоманс в C#: http://habrahabr.ru/post/165729/
Достаточно интересная статья, хотя примеры оптимизированного кода ломают глаз и выносят мозг.
Статью Свеном написал. И по комментам сразу понятно. ))
...
Рейтинг: 0 / 0
Элегантные решения
    #38771639
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ваще, в статье даже нет замены всех умножений и делений на 2 байтовыми сдвигами и прочими такими "оптимизациями".

Ещё понравилась ветка http://habrahabr.ru/post/165729/#comment_5748857
Видел повсеместную расстановку null'ов руками в паттерне Dispose. Т. е. вызывается Dispose() для объекта, а потом ему null присваивается.

По-моему, при таких требованиях к оптимизации и скорости кода (выжимаем процентики производительности) лучше писать на С/С++. А ещё лучше - сразу на ассемблере.
...
Рейтинг: 0 / 0
Элегантные решения
    #38771680
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще, скажите, что дешевле - посадить пару человек на зарплату по 150 килорублей каждого, чтобы они код проекта вот так вот заоптимизировали за год, или купить ещё один Ксеон, пару плашек оперативы и оплачивать чуть бОльшие счета за электричество?

По-моему, если нужна производительность, то надо использовать подходящий для этого инструмент. C#'пы и джавы всякие явно не для этого. А попытки выточить напильником из паровоза феррари, да ещё заставить полученное ездить так же быстро - только напрасная трата ресурсов. Хотя, конечно, можно гордиться личным достижением - смог, мол.
...
Рейтинг: 0 / 0
Элегантные решения
    #38771702
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320А вообще, скажите, что дешевле - посадить пару человек на зарплату по 150 килорублей каждого, чтобы они код проекта вот так вот заоптимизировали за год, или купить ещё один Ксеон, пару плашек оперативы и оплачивать чуть бОльшие счета за электричество?
Несопоставимо. Если есть алгоритм, который на C# работает условно 1 секунду, а на С++ 0.2 секунды, то покупка дополнительного железа никак не ускорит работу алгоритма. Например, ЭЦП.

user7320По-моему, если нужна производительность, то надо использовать подходящий для этого инструмент
Точно.

user7320C#'пы и джавы всякие явно не для этого
Серьезное заблуждение. HFT очень часто делают на Java (см. вакансии ДойчеБанка). К тому же понятие "производительность" очень обманчиво. Более правильно говорить про выбор инструмента, реализующего какую-то логику в пределах заданных рамок, в т.ч. и временнЫх.

Далее, иногда накладные расходы на поддержание и интеграцию разных ЯП и платформ больше, чем выигрыш по производительности.
...
Рейтинг: 0 / 0
Элегантные решения
    #38771723
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320А вообще, скажите, что дешевле - посадить пару человек на зарплату по 150 килорублей каждого, чтобы они код проекта вот так вот заоптимизировали за год, или купить ещё один Ксеон, пару плашек оперативы и оплачивать чуть бОльшие счета за электричество?У нас на проекте расходы на разработку больше, чем расходы на инфраструктуру.

Да и люди платят деньги не за то, что приложение с ростом клиентов, данных и трафика, работает на том же железе.
Посчитайте сколько вы за год денег НЕ заработаете, если будете заниматься оптимизацией. :)
...
Рейтинг: 0 / 0
Элегантные решения
    #38771737
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Arm79,

я с вами согласен.

Главное, чтобы можно было быстро и точно выяснять узкие места, когда приспичит. Тогда и соптимизировать можно. А если битики руками сдвигают и наллы присваивают только потому, что "я крутой праграмист, а вы все казлы!" - лучше уволить такого работника.
...
Рейтинг: 0 / 0
Элегантные решения
    #38771757
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот встречаю я присвоение наллу после Dispose(). Если бы его не было - я бы дальше пошёл кодить не задумываясь. А теперь я долго думаю - нафига здесь ЭТО? Гуглю, читаю, иду к написавшего ЭТО и спорю с ним, выясняю. И если таких моментов - каждый второй в коде этого умника, а задача мегаоптимизаций не стоит, то что делать в этом случае?

Особенно, если этот умник говорит "RTFM faggot, мне некогда тут студней азам учить!".
...
Рейтинг: 0 / 0
Элегантные решения
    #38772121
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320А ваще, в статье даже нет замены всех умножений и делений на 2 байтовыми сдвигами и прочими такими "оптимизациями".
с этим давно справляются компиляторы. и не только на степень двойки можно умножать хитрожопым образом -
lea eax,[eax+eax*4] например для x86
...
Рейтинг: 0 / 0
Элегантные решения
    #38772411
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
авторВот встречаю я присвоение наллу после Dispose().
а какая взаимосвязь null и Dispose?, Dispose - обыкновенный метод
...
Рейтинг: 0 / 0
Элегантные решения
    #38772415
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Вот встречаю я присвоение наллу после Dispose()

Дык - помощь сборщику, почему нет?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
class SomeClass
{
     private MyDisposable _item;
     public void Stop()
     {
          _item.Dispose();
          _item = null;
     }
}
...
Рейтинг: 0 / 0
Элегантные решения
    #38772419
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320А теперь я долго думаю - нафига здесь ЭТО?Додумался, али подсказать?
...
Рейтинг: 0 / 0
Элегантные решения
    #38773226
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris
Дык - помощь сборщику, почему нет?

Сборщику иначе нужно помогать.
...
Рейтинг: 0 / 0
Элегантные решения
    #38773356
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВPallarisДык - помощь сборщику, почему нет?

Сборщику иначе нужно помогать.?
...
Рейтинг: 0 / 0
Элегантные решения
    #38773425
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
Присваивать или не присваивать null, от этого мало толка, GC и без этого эффективно найдет недостижимые объекты.
ИХМО нужно делать так, что бы GC работал как можно меньше, т. е. не создавать без объекты там, где без этого можно обойтись.
P. S. интересно, что первая версия GC была написана на LISP, а потом оттранслирована в C++.
...
Рейтинг: 0 / 0
Элегантные решения
    #38773582
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВskyANA,
Присваивать или не присваивать null, от этого мало толка, GC и без этого эффективно найдет недостижимые объекты.
ИХМО нужно делать так, что бы GC работал как можно меньше, т. е. не создавать без объекты там, где без этого можно обойтись.
P. S. интересно, что первая версия GC была написана на LISP, а потом оттранслирована в C++.Что-то как-то не о том.
...
Рейтинг: 0 / 0
Элегантные решения
    #38773589
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Был создан нужный объект, он отработал своё, прибит, предварительно освободив использованные неуправляемые ресурсы.

Что значит "не создавать"? А работу, кто будет работать?
...
Рейтинг: 0 / 0
Элегантные решения
    #38774523
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВskyANA,
Присваивать или не присваивать null, от этого мало толка, GC и без этого эффективно найдет недостижимые объекты.


Прохладная история.
Чем меньше живых ссылок на объект, тем лучше для сборщика.
...
Рейтинг: 0 / 0
Элегантные решения
    #38774567
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisПрохладная история.
Чем меньше живых ссылок на объект, тем лучше для сборщика.

ему это глубоко фиолетово
...
Рейтинг: 0 / 0
Элегантные решения
    #38774585
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAБыл создан нужный объект, он отработал своё, прибит, предварительно освободив использованные неуправляемые ресурсы.

Что значит "не создавать"? А работу, кто будет работать? скайана, тут имеют ввиду, что надо стремиться создавать меньеш объектов, если это возможно. GC в .Net работает отвратительно, поэтому, в отличие от той же Java, здесь реально надо париться над этим. Что есть, то есть.
...
Рейтинг: 0 / 0
Элегантные решения
    #38774586
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилему это глубоко фиолетово

Внезапно...
Ну хорошо - ссылке не был присвоен нул, объект ушел во второе поколение - кому от этого стало лучше?
...
Рейтинг: 0 / 0
Элегантные решения
    #38774588
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisВнезапно...
Ну хорошо - ссылке не был присвоен нул, объект ушел во второе поколение - кому от этого стало лучше?В большинстве случаев, если вы начинаете чистку ресурсов какого-то объекта, то он и сам вот-вот будет собран GC. Как в примере выше - вы вызвали некий Stop(), что скорее всего означает, что вы заканчиваете работать с этим объектом, и с его кишками. Если это так - то ничего обнулять не надо, это маразм.
Если же с этим объектом планируется дальнейшая работа, то да - хорошо бы его кишки обнулить.
...
Рейтинг: 0 / 0
Элегантные решения
    #38774604
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvskyANAБыл создан нужный объект, он отработал своё, прибит, предварительно освободив использованные неуправляемые ресурсы.

Что значит "не создавать"? А работу, кто будет работать? скайана, тут имеют ввиду, что надо стремиться создавать меньеш объектов, если это возможно. GC в .Net работает отвратительно, поэтому, в отличие от той же Java, здесь реально надо париться над этим. Что есть, то есть.Это я понял, но вопрос-то у user7320 был не в этом :)
...
Рейтинг: 0 / 0
44 сообщений из 44, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Элегантные решения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]