powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Элегантные решения
25 сообщений из 44, страница 1 из 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
25 сообщений из 44, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Элегантные решения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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