C# – Правильный способ передачи параметров, чтобы избежать заиканий GC?C#

Место общения программистов C#
Ответить
Anonymous
 C# – Правильный способ передачи параметров, чтобы избежать заиканий GC?

Сообщение Anonymous »


(Я нашел несколько похожих вопросов, но они были не совсем такими же и не десятилетней давности.)

Итак, параметры в C# передаются как значения или как ссылки.

говорю, что да,

static void main() { имя строки = «Привет, мир»; Console.WriteLine(имя); testfunc (имя); Console.WriteLine(имя); } void testfunc (имя строки) { имя = "переполнение стека"; Console.WriteLine(имя); } #Выход => здравствуй, мир => переполнение стека => здравствуй, мир Итак, этот параметр передается как значение и больше не связан с исходной переменной (в памяти). Я предполагаю, что это означает, что переменная копируется в новое место в памяти, а затем передается (что включает в себя выделение, копирование и последующую передачу в функцию).

Тогда делаем следующее:

static void main() { имя строки = «Привет, мир»; Console.WriteLine(имя); testfunc (имя ссылки); Console.WriteLine(имя); } void testfunc (имя ссылочной строки) { имя = "переполнение стека"; Console.WriteLine(имя); } #Выход => здравствуй, мир => переполнение стека => переполнение стека Итак, я предполагаю, что исходная ссылка/указатель на переменную была передана в функцию, и никакого выделения или копирования новой памяти/данных не произошло.

Итак, я подумал, есть ли у первого метода какие-то накладные расходы (он обязательно должен быть для данных >= 10 МБ). Но тогда второй метод небезопасен, поскольку потенциально может повредить исходные данные.

Итак, что нам следует сделать или какую оптимизацию мы можем применить, чтобы преодолеть накладные расходы первого метода (если они есть)? То же самое справедливо и для значений, возвращаемых функцией.

**Мой пример использования: **Я разрабатываю игру в Unity. Мне нужно создать мир. Для этого я создаю 3D-карты шума (очень большие, а также множественные для влажности, цивилизации, местности и т. д.). Они занимают в общей сложности около 70-80 МБ памяти. Теперь я передаю их все функции, где они объединяются и создается окончательный мир. Итак, если в память копируется 100 МБ данных (как в первом методе выше), то я не думаю, что это будет очень хорошо для машин с
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»