|
0 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 38
|
|
Автогенерация массивов21.06.2023, 14:20. Показов 2070. Ответов 35
Метки нет (Все метки)
Допустим в ходе вычислений я заполняю массив результатами. В 99 случаях это 1 результат на 1 ячейку. Но если результат попадает на уже занятую ячейку, возникает необходимость ещё в одном аналогичном массиве, в теории до нескольких тысяч. Глупо сразу генерировать тысячи массивов, которые наверняка не будут использованы. Можно удваивать и т.д. существующий массив и плюсовать индекс обращения к нему, но, насколько я знаю, при изменении размера массива- создаётся новый массив, а данные копируются- впустую расходуются ресурсы.
Существует ли способ автогенерации массивов по мере необходимости? Ну и соответственно их автоименования.
0
|
|
| 21.06.2023, 14:20 | |
|
Ответы с готовыми решениями:
35
Автогенерация форм для ввода данных в БД
|
|
0 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 38
|
|
| 22.06.2023, 22:38 [ТС] | |
|
Wolfdp,
Для меня самого загадка, почему после стольких объяснений, никто так и не понял, что мне нужно. ChatGPT по одной фразе, выдал мне сразу то что нужно и в первом и во втором случае. Правильный совет был в самом начале- List<T>. Но List<T> мне не подходит, потому что это аналогия динамического массива, - это медленный способ, как говорят програмисты- наивный метод. А вот напрямую работать с выделенной памятью- это то, что нужно, ну понятно, что со всеми вытекающими. А задача в том, что во время работы программы, она сама создавала массивы, один или тысячу, сколько посчитает нужным.
0
|
|
|
Модератор
|
||||||||
| 23.06.2023, 00:04 | ||||||||
|
То что вам ответил ChatGPT - это по сути метод Array.Resize. И по скорости он будет такой же. А может и медленее. И в любом случае, ничего быстрее Array и List вы не придумаете. А ChatGPT оставьте на случай, когда понадобится "бред сумасшедшего". Добавлено через 7 минут new T[].В оболочке Array используется вызов наитивного кода копирующего блок памяти, что гораздо быстрее. В Шарпе в безопасном коде эту функцию выполняет очень оптимизированный GC. Есть множество различных тестов доказывающих, что он работает гораздо лучше чем прямое отслеживание и очистка памяти, например, как в плюсах. Добавлено через 9 минут new или обращением к ОС), то для таких задач обычно стараются как-то минимизировать создание новых массивов.Но реализации такой оптимизации очень различны. Всё зависит от условий ТЗ, статистического анализа данных и др. Например, если заполняемость массива данными не высокая (иначе вы не получили бы значение 99%), то можно использовать HashTable через оболочку Dictionary. Есть множество других способов оптимизации. Но нужно нормальное описание РЕШАЕМОЙ ЗАДАЧИ, а не того КАК вы ХОТИТЕ её решить.
1
|
||||||||
|
|
|||
| 23.06.2023, 04:26 | |||
|
[1, 2, 3, 4] мы пытаемся в индекс 1 записать значение 9, но там уже не ноль нам нужно создать новый? Типа такого? [1, 2, 3, 4] [1, 9, 3, 4] И при этом вам нужны оба массива? Почему не подходит тупо List<int[]> ? Задача не в этом? Или вам не нравится что значения 1 3 4 дублируются? Или вы думаете что у меня завалялся волшебный гадальный шар, который может ответить на все эти вопросы?
0
|
|||
|
0 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 38
|
|
| 23.06.2023, 05:32 [ТС] | |
|
Ребята, не требуйте от меня профессиональных ответов, иначе б я не задавал непрофессиональных вопросов. Я редкий програмист C#, на практике я программирую микроконтроллеры на С. Ну а С это- "Что хочу, то и делаю", по сравнению с C#, который- "А ты руки мыл?", "А ты их вытер?". Может поэтому я изьяснясь не совсем прозрачно.
Мои оценки скорости выполнения основаны на статьях, где люди проводили реальные замеры, некоторые из них древние, возможно устарели. В любом случае, я пока не смогу всё проверить. Всем большое спасибо.
0
|
|
|
|
||
| 23.06.2023, 08:24 | ||
|
IhKa, без обид, но спрашивали вас не знание кода C#, а какую задачу вы поставили перед собой. Как-то люди заказующие софт и не знающие программирование от слова "совсем" справляются с этим, а у вас внезапно режим Штирлица на допросе.
Сравнивать или проводить аналогии с Си или даже С++ не рекомендую, так как C# чуть более высокоуровневый и некоторые вещи отданы на откуп CLR (тоже управление памятью). Адрессная арифметика тут больше как исключение, нежели обыденная практика, с указателями аля int* работают не то чтобы часто. Массивы, строки и многие другие вещи уже достаточно оптимизированы, чтобы не заморачиватся с тем "а хватит ли мне памяти". В новых версиях также ввели кучу улучшений, взять тот же Span. Ну и думаю половина людей кодящих на C# в первую очередь озадачиваются оптимизацией sql-запроса, как бы иронично это не звучало. По поводу того что "List медленный" очень важно понимать как он используется. Например зная что количество элементов явно будет выше 1_000_000, можно сразу задать размер стартовый размер в один лям, чтобы не дробилось в последствии.
0
|
||
|
0 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 38
|
|
| 23.06.2023, 08:44 [ТС] | |
|
Wolfdp,
Моё решение о задаче было изменено ещё в 10 посте, но кто их читает ) За стремление помочь, действительно большое спасибо, и за ссылки отдельно.
0
|
|
|
2410 / 1942 / 764
Регистрация: 27.07.2012
Сообщений: 5,580
|
|||
| 23.06.2023, 09:26 | |||
|
Добавлено через 4 минуты
2
|
|||
|
Модератор
|
||||
| 23.06.2023, 10:24 | ||||
|
Но там же в посте, вы написали само решение, всё же хотелось бы знать. Может кто поопытнее напишет.Вот у вас и интересуются "решение" чего, какой задачи? На Си используется низкоуровневое (сравнительно) управление памятью. Шарп - совсем иная история. Он не компилируется в наитивный код и большая часть взаимодействия с ОС отдана на откуп CLR. И CLR делает это ОЧЕНЬ эффективно независимо от платформы (теоретически Шарп приложение может без перекомпиляции запускаться на любом устройстве). Пытаться заменить "ручным" кодом логику типов .Net и CLR - чаще всего "гиблое дело". Другое дело, что под определённую задачу надо выбирать наиболее подходящие типы (в данном случае коллекции) и приемы работы с ними. Поэтому у вас и интересуются конкретными условиями ТЗ задачи, а не того как вы хотите её решить. Добавлено через 8 минут Пример. Есть инт массив и список. В них просто записывают одно и тоже число миллион раз. И читают его. Если список не был сразу инициализирован нужным размером, то конечно, запись в него будет много медленнее, так как будут запросы на выделение памяти при увеличении его размера. Тоже самое, но если размер был сразу задан, то список будет чуть медленнее (единицы процентов). Тоже самое, но для любого ссылочного типа и созданием нового объекта для каждого индекса. В такой задаче, на фоне создания новых объектов, разницу в скорости между массивом и списков, скорее всего, даже измерить не удастся. Добавлено через 39 секунд И какой из этих трёх тестов можно назвать "реальным замером"?
0
|
||||
|
0 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 38
|
|
| 23.06.2023, 13:20 [ТС] | |
|
Wolfdp,
Я понял, вы хотите знать, что я вообще ваяю. Да это чисто для себя, хочу редактировать файлы vmd для программы MMD. Но пока даже алгоритма толком нет, одни идеи. Типа чтоб файлы движений подстраивались под 3D модель автоматически.
0
|
|
|
0 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 38
|
|
| 23.06.2023, 14:38 [ТС] | |
|
Элд Хасп,
Ну две програмки уже сделаны и работают с этими файлами. Ну и да работа с массивами, это лишь винтик в машине.
0
|
|
|
0 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 38
|
|
| 23.06.2023, 16:32 [ТС] | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 38
|
|
| 23.06.2023, 17:14 [ТС] | |
|
Элд Хасп,
Я вас прекрасно понял, но останусь при своём мнении. Это не имеет значения, поскольку у меня будут на вооружении два новых отработаных метода работы с массивами. И я смогу применять их хоть там, где они ничего не дадут, хоть там, где без них ничего не выйдет.
0
|
|
|
2410 / 1942 / 764
Регистрация: 27.07.2012
Сообщений: 5,580
|
|
| 23.06.2023, 22:30 | |
|
IhKa, когда рутина немного наскучит, почитайте про Golden Hammer.
1
|
|
| 23.06.2023, 22:30 | |
|
Из двух непустых неубывающих массивов напечатать элементы, которые входят только в один из массивов
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|