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

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

04.06.2024, 19:00. Показов 3178. Ответов 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
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,727
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,829
Записей в блоге: 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
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,727
06.06.2024, 17:47
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Попробуйте выполнить кучу операций с огромными списками, требующих прохода по коллекции, и таких, которые не покрываются LINQ. Будете в шоке от количества сгенерированного мусора, который еще неизвестно, когда освободится - на слабом компьютере OutOfMemoryException уже наступит.
Давай будем исходить из примера такого кода. И попробуем убедиться, что виноват не говнокод, а обстоятельства, требуеющие того, о чём ты говоришь.

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

Ты к такому решению пришёл отталкиваясь от тестов или от домыслов, как ты обычно делаешь?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
06.06.2024, 20:50  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Давай будем исходить из примера такого кода. И попробуем убедиться, что виноват не говнокод, а обстоятельства, требуеющие того, о чём ты говоришь.
Примерно здесь пример такого кода (возможно, чуть выше или ниже). Методы EncodeInts, EncodeBytes, WriteLZ, LZRequisites. Сразу предупреждаю - на количество параметров лучше забить, там точно говнокод. Но если именно операции с коллекциями - говнокод, научите меня, какая альтернатива.
0
Эксперт .NET
 Аватар для Usaga
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,727
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
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,727
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
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,727
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
Ответ Создать тему
Новые блоги и статьи
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru