Болталка PascalABC.NET

Нужно ли создание аналога using из C#?

  • Да
  • Нет
  • Воздержусь от голосования

0 голосов

Причину(-ы) такого выбора укажите, если хотите, ниже, приведя аргументы в пользу своей точки зрения.

Нужно ли создание аналога using из C#?

  • Да
  • Нет
  • Воздержусь от голосования

0 голосов

Причину(-ы) такого выбора укажите, если хотите, ниже, приведя аргументы в пользу своей точки зрения.

Нужно ли создание аналога using из C#?

  • Да
  • Нет
  • Воздержусь от голосования

0 голосов

Причину(-ы) такого выбора укажите, если хотите, ниже, приведя аргументы в пользу своей точки зрения.

  • with
  • using

0 голосов

Большинство за введение using…

Напомнило фразу, которую мне сказал учитель, когда я ещё учился классе в 9. Я предлагал использовать динамический массив (пользователь должен ввести кол-во элементов), а учитель предложил/настоял на статическом массиве гигантских размеров. Если неэффективность процессорного времени можно стерпеть, то неправильное использование памяти - катастрофа!

Профит в том, что Вы копируете лишь ссылки на строки, а не сами строки. Ссылка занимает 4 байта, а строка - хоть 2 ГБ. Это и быстрее и экономичнее по памяти. Не исключено, что такой массив будет лежать в куче малых объектов и будет собран сборщиком мусора.

тут размер массивов можно изменять, в отличии от статичных. А учитель вам так сказал по из 2 причин

  • эту тему ещё не учили
  • учитель не может отпустить прошлый век

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

ссылка занимает столько бит - скольки-битная система, а не 32. И ваш случай ускоряет строки, но замедляет столбцы.

Что весит больше: ссылка на массив или сам массив?

Вы забываете про то что кроме ссылки на массив - в первом случае есть ещё и сам массив.
А ссылка+массив > массив.

А как без него?

Это уже тавтология. Ещё раз:

  • array of array хранит 1 высоту, но кучу копий ширины матрицы. И + в нём ещё хранится по ссылке на каждую строчку.
  • array[,] хранит только 1 высоту и 1 ширину, и никаких ссылок. Поэтому на него надо меньше памяти.

Вы оправдываете использование array of array память, хотя ваш пример даёт преимущество только в производительности, и ограничивает возможности (можно или быстро добавлять/удалять строки, или так же с столбцами, но не вместе).

Значит надо писать свой класс матрицы, помещая данные в неуправляемую память.

А вообще, известно, что всевозможный сахар замедляет код.

Много сообщений уже по теме, читал - и так не смог понять: ради чего все это затевается с матрицами? Из любви к искусству?

3 лайка

А так никто и не ответил… неужели и правда? Если матрицы надо обрабатывать плотные общего вида и “миллион на миллион” - да, понятно, надо писать свою библиотеку. Если матрицы огромные и специального вида - симметричные, ленточные, разреженные - там тоже понятно. Но это же не ваш случай?

1 лайк

Нет конечно. Простая задача. Есть динамическая матрица (или массив массивов, кто что больше любит), нужно удалить (добавить) строку (столбец) без использования дополнительных матриц (массивов) и желательно без переопределения памяти. С перевыделением новой памяти я уже написал в самом начале. И со статическими массивами я тоже знаю как это делается. Думал есть какие-то способы вроде List в одномерных массивах.

Задача реальная или она “просто есть”? Какие ограничения реальные на размеры матриц и их содержимое? Какая нужда заниматься экономией памяти?

Ну, List я вам привёл для матриц. Но он тоже не на магии работает - я сохранил те же константы что в стандартном List: изначальный размер=4, когда размера не хватает - умножить его на 2.

1 лайк

Та же, что и во времена Вашей молодости. Только масштабы другие.

Вот тут я бы хотел послушать первоисточник