Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,837
Записей в блоге: 14

Сделать, чтобы компилятор выдавал предупреждение, когда можно заменить класс, метод и т. д. на более оптимальные

04.06.2024, 19:00. Показов 3190. Ответов 45
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Допустим, пользователь ввел List<int>, но такой тип неоптимален, когда есть NList<int>. Аналогично с Convert и NConvert, когда целевой тип - int. При этом на List<string> предупреждение не должно выдаваться, так как тип NList<string> невозможен. Как это можно сделать?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.06.2024, 19:00
Ответы с готовыми решениями:

Сделать, чтобы метод выдавал вычисленные значения в виде массива
Как сделать , чтобы метод выдавал вычисленные значения в виде массива ? Помогите static double Table(double x) { ...

Как сделать так чтобы, когда символ '@' попадает на знак 'X' запускался метод?
Привет всем, если кратко то мне нужно сделать так, когда символ '@' попадает на знак 'X' запускался метод. Долго думал ничего не смог. с# ...

Можно ли как-то сделать, чтобы ноутбук, когда закрывали крышку не вырубался?
Можно ли как-то сделать, чтобы ноутбук, когда закрывали крышку не вырубался?

45
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
05.06.2024, 23:16
Студворк — интернет-сервис помощи студентам
Etyuhibosecyu, напишите уже свой язык свой компилятор, отстаньте вы от c#, он неоптимальный тормознутый, люди которые все это писали вообще не имеют понятия в языках, накрутили непонятно что, вот вы когда свой язык напишите со своим компилятором, вот тогда программисты заживут.
1
176 / 74 / 27
Регистрация: 10.11.2023
Сообщений: 199
06.06.2024, 09:33
Цитата Сообщение от belalugoci Посмотреть сообщение
я сразу понял )
Нет уважаемый belalugoci, ничего вы не поняли и к сожалению не разобрались.
Цитата Сообщение от belalugoci Посмотреть сообщение
задача как раз решаема и вопрос был по возможностям самого компилятора. Это так же как например использование Dictionary и HashSet, в MSDN указаны варианты использования того или другого, не вижу никакой сложности "увидев" неоптимальный сценарий выдать подсказку. Я вон код набираю и он мне подсказывает что написать, ошибается часто, но проще нажать таб и исправить пару символов чем набирать всю конструкцию
Компилятор ничего не может подсказать во время набора. Вы путаете компилятор со статическим анализатором.
0
06.06.2024, 09:50

Не по теме:

душат парня
он придумал NList!, но малообразованные не понимают(

0
 Аватар для Worldmaster
323 / 190 / 45
Регистрация: 25.08.2011
Сообщений: 1,263
06.06.2024, 10:03
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
можно освободить память моментально, вызвав Marshal.FreeHGlobal(), а в List<T> нужно ждать, пока заведется сборщик мусора.
Что же это за задача такая что скорость освобождения памяти настолько критично?

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
а вот сборка мусора - это серьезное преимущество.
Пишите на сях. И руками рулите мусор. Ни разу за всю историю не видел чтобы сборщик не справлялся со своими задачами. А если не справлялся то это ошибка в коде.
0
Эксперт .NET
 Аватар для Usaga
14371 / 9475 / 1360
Регистрация: 21.01.2016
Сообщений: 35,746
06.06.2024, 11:08
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
о он ВСЕГДА оптимальнее List<T> как минимум по одному признаку: сборке мусора. В NList<T> можно освободить память моментально, вызвав Marshal.FreeHGlobal(), а в List<T> нужно ждать, пока заведется сборщик мусора.
Что? Зачем ждать сборщик мусора? И надо ещё посмотреть, что ты там неуправляемого такого руками высвобождаешь. Есть подозрение, что ты придумал решение проблемы, которую сам же и добавил.
0
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
06.06.2024, 11:15
про какую речь идет сборка мусора в List<T>
если он не пересоздается и и используется ровно та длина которую мы задали?
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
06.06.2024, 11:34
Цитата Сообщение от ZeroKara Посмотреть сообщение
Компилятор ничего не может подсказать во время набора. Вы путаете компилятор со статическим анализатором
каюсь, я по привычке IDE именую всегда компилятором. Ну что поделать, привык так.

Цитата Сообщение от ZeroKara Посмотреть сообщение
ничего вы не поняли и к сожалению не разобрались
я рад что вы лучше меня знаете что происходит в моей голове.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,837
Записей в блоге: 14
06.06.2024, 12:51  [ТС]
Цитата Сообщение от Worldmaster Посмотреть сообщение
Пишите на сях. И руками рулите мусор.
Я не знаю, что такое "сяхи". Как бы там ни было, давайте не разводить холивар, кому на чем писать. Мне C# удобен.
Цитата Сообщение от Worldmaster Посмотреть сообщение
Ни разу за всю историю не видел чтобы сборщик не справлялся со своими задачами. А если не справлялся то это ошибка в коде.
Цитата Сообщение от Usaga Посмотреть сообщение
Что? Зачем ждать сборщик мусора?
Попробуйте выполнить кучу операций с огромными списками, требующих прохода по коллекции, и таких, которые не покрываются LINQ. Будете в шоке от количества сгенерированного мусора, который еще неизвестно, когда освободится - на слабом компьютере OutOfMemoryException уже наступит.
Цитата Сообщение от Usaga Посмотреть сообщение
И надо ещё посмотреть, что ты там неуправляемого такого руками высвобождаешь.
Смотрите.
0
 Аватар для Worldmaster
323 / 190 / 45
Регистрация: 25.08.2011
Сообщений: 1,263
06.06.2024, 13:11
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Попробуйте выполнить кучу операций с огромными списками, требующих прохода по коллекции, и таких, которые не покрываются LINQ.
Так может тут хромают алгоритмы? Надо может быть продумать алгоритм более правильно и эффективно?
На и помимо List есть более эффективные коллекции.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
что такое "сяхи".
Это тот самый С++ где было принято четко следить за выделяемой памятью и стараться эффективно ее расходовать.
0
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
06.06.2024, 15:10
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Попробуйте выполнить кучу операций с огромными списками
например
0
Эксперт .NET
 Аватар для Usaga
14371 / 9475 / 1360
Регистрация: 21.01.2016
Сообщений: 35,746
06.06.2024, 17:47
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Попробуйте выполнить кучу операций с огромными списками, требующих прохода по коллекции, и таких, которые не покрываются LINQ. Будете в шоке от количества сгенерированного мусора, который еще неизвестно, когда освободится - на слабом компьютере OutOfMemoryException уже наступит.
Давай будем исходить из примера такого кода. И попробуем убедиться, что виноват не говнокод, а обстоятельства, требуеющие того, о чём ты говоришь.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Смотрите.
Посмотрел. Ты там просто массив руками аллоцируешь и высвобождаешь. Преимущество в чём? Если бы ты хотя бы пытался учебник по C# открыть, то знал бы, что GC управляемые объекты умеет упаковывать, чтобы бороться с фрагментацией. А твоё решение этому тупо мешает, ибо тут уже сырые указатели.

Ты к такому решению пришёл отталкиваясь от тестов или от домыслов, как ты обычно делаешь?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,837
Записей в блоге: 14
06.06.2024, 20:50  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Давай будем исходить из примера такого кода. И попробуем убедиться, что виноват не говнокод, а обстоятельства, требуеющие того, о чём ты говоришь.
Примерно здесь пример такого кода (возможно, чуть выше или ниже). Методы EncodeInts, EncodeBytes, WriteLZ, LZRequisites. Сразу предупреждаю - на количество параметров лучше забить, там точно говнокод. Но если именно операции с коллекциями - говнокод, научите меня, какая альтернатива.
0
Эксперт .NET
 Аватар для Usaga
14371 / 9475 / 1360
Регистрация: 21.01.2016
Сообщений: 35,746
07.06.2024, 02:44
Etyuhibosecyu, я не могу сказать, что там происходит. Каша настоящая. Но я вижу твою типичную ошибку - любовь жонглированием коллекциями. Сортировки, преобразования, копирования. Потом снова.

Вот такую строку ещё найди и ответь себе зачем оно, если результат всё равно не используется:
C#
1
var nextCodes2 = nextCodes.JoinIntoSingle().ToHashSet();
В общем, я вижу типичную для тебя ошибку: совершенно бездумное создание тонн мусора в куче и нежелание использовать отладчик, профилировщик и мозг, чтобы навести порядок. Вместо этого, типичное решение: начать изобретать велосипед, который должен, якобы, волшебным образом твой говнокод оптимально пережёвывать.

Опять виноват Microsoft, что их платформа в твоих руках никак не хочет превращаться в конфетку. Поэтому ты сам решил поиграться в повара.

Вот давай честно, ладно? Ты же не пробовал профилировать и отлаживать эту портянку, да? Не просто запустить инструмент, ничего не понять и закрыть. А именно честно попытаться разобраться. Я вижу, что ответ тут - нет, даже не пытался.

Добавлено через 7 минут
Т.е. более доходчиво перефразирую свою мысль:

Ты уже сам понял примерную проблему того кода: memory pressure (нагрузка мусором на GC). И вместо самого очевидного решения - уменьшения memory pressure - ты опять улетел куда-то в стратосферу и решил сотворить какие-то говноколлекции, которые будут брать на себя часть функций GC вынуждая разработчика везде и всюду пинать Dispose у них...

Ты уверен, что кто-то кроме тебя, носителя Правительских Званий, таким путём пойдёт вместо того, чтобы просто активировать убер-фичу - мозг?

Добавлено через 4 минуты
А дальше больше: выйдя в стратосферу и начав испытывать кислородное голодание, твой мозг выдал следующий вектор движения - вообще в сторону Марса - породить некий анализатор для Visual Studio, который будет стараться советовать твои говноколлекции к месту и не к месту.

Т.е. одно тупое решение, стало отправной точкой для целой цепочки тупых решений.

И опять ты даже не постарался задуматься о том, почему всем хватает стандартных решений (ну, плюс-минус), и только у тебя одного оно работает из рук вон плохо?
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
07.06.2024, 07:30
Цитата Сообщение от Worldmaster Посмотреть сообщение
На и помимо List есть более эффективные коллекции
Подскажите чем будет более эффективно пользоваться для коллекции своего класса, чтобы сохранялся доступ по индексу и динамическое увеличение размера коллекции? (я правда хочу знать так как активно пользуюсь List и хотелось бы понять что есть лучше него)
0
Эксперт .NET
 Аватар для Usaga
14371 / 9475 / 1360
Регистрация: 21.01.2016
Сообщений: 35,746
07.06.2024, 08:00
Цитата Сообщение от belalugoci Посмотреть сообщение
чтобы сохранялся доступ по индексу и динамическое увеличение размера коллекции?
Под это только List<T> подпадает.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
07.06.2024, 08:08
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Допустим, пользователь ввел List<int>, но такой тип неоптимален, когда есть NList<int>
Пару вопросов:
- как насчет (де)сериализации? Тот же System.Text.Json правильно обработает ваш класс?
- как насчет передачи как колекцию в лямда запрос для orm? Всякие даперы и прочие тоже правильно разверну в IN, или выплюнут исключение?
0
Эксперт .NET
 Аватар для Usaga
14371 / 9475 / 1360
Регистрация: 21.01.2016
Сообщений: 35,746
07.06.2024, 08:11
Цитата Сообщение от Wolfdp Посмотреть сообщение
Всякие даперы и прочие тоже правильно разверну в IN
Даппер запросы не строит. Он ничего ни во что разворачивать не будет)
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
07.06.2024, 10:13
Цитата Сообщение от Usaga Посмотреть сообщение
Даппер запросы не строит. Он ничего ни во что разворачивать не будет)
Ок, любая ORM которая позволяет древо (или как оно там правильно именуется) из Linq методов преобразовать потом в sql-запрос. Может это пережитки прошлого и сейчас всё что IEnumerable.Contains или Any спокойно проходит, но помню что мне приходилось лист конвертить в массив, потому-что в противном случае ругалось.

На самом деле мысль можно развернуть шире:
- есть общепризнанные коллекции, которые используются в общих (и не очень) библиотеках. С ним всё будет работать близко к 100%
- если мы пишем свои классы-коллекции, то максимум что потом может использоваться -- IEnumerable. В остальных случаях нам постоянно придется перегонять в ToList, ToArray и прочие приключения.

Учитывая что ТС предлагает варнинг или иные уведомления, которые будут постоянно маячить перед глазами там где оно не надо от слова совсем -- идея так себе.
0
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
07.06.2024, 10:44
Цитата Сообщение от Wolfdp Посмотреть сообщение
IEnumerable.Contains или Any
потому что это like или in
Цитата Сообщение от Wolfdp Посмотреть сообщение
но помню что мне приходилось лист конвертить в массив, потому-что в противном случае ругалось.
20 лет назад?
Цитата Сообщение от Wolfdp Посмотреть сообщение
На самом деле мысль можно развернуть шире:
больше похоже вы сами не знаете как работает linq и IQueryable, либо не работаете с этим
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
07.06.2024, 11:14

Не по теме:

Цитата Сообщение от Dr9vik Посмотреть сообщение
20 лет назад?
учитывая что моя практика тыжпрограммиста идет с 2013 года, думаю таки раньше.



Цитата Сообщение от Dr9vik Посмотреть сообщение
больше похоже вы сами не знаете как работает linq и IQueryable, либо не работаете с этим
Я говорю о том, с чем встречался на практике. Доказывать свою (не)правоту сильного желания сейчас нет, можете смело не верить. Банальное использование List<T> вместо T[] уже может давать те или иные аффекты. А это общеупотребляемые коллекции. С кастомной коллекцией приключений скорее всего будет больше. Понятное дело что это будет проявлятся не ежедневно в каждой строчке кода, но с другой стороны -- зачем все эти нежданчики, если есть проверенное решение?

Поэтому если бы мне сказали на проекте, что необходимо всюду использовать самописный NList<T>, то я лично восприниму это в штыки и буду до последнего отвоевывать право использовать более общепринятые подходы. Ибо всяких решений, из-за которых приходится страдать, и без этого хватает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.06.2024, 11:14

Можно ли сделать, чтобы программа заполняла БД в два и более потока?
Добавляю запись в таблицу MySql кодом. (код условный) try { using (MySqlConnection connection = new...

Как сделать чтобы когда форма открыта можно было управлять персонажем?
Подключил к Юнити WindowsFormAplication,все работает,но проблема в том что когда открыта форма не могу управлять персонажем в Юнити.Как...

Нужно сделать, чтобы в Edit можно было вводить не более 3-х символов
Нужно сделать, чтобы в Edit можно было вводить не более 3-х символов

Как сделать чтобы rand() выдавал в массив неповторяющиеся числа?
Короче смысл такой. Программка почти дописана, задача стояла такая: Написать метод /функцию, которая решает задачу простым перебором...

Как сделать так, чтобы код не IP выдавал, а имя компьютера
Вот смотрите... &lt;%=Request.ServerVariables('HTTP_USER_AGENT')%&gt; выдает имя клиентской программы ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
сукцессия 30. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru