#c# #go #.net-core #garbage-collection
#c# #Вперед #.net-core #сборка мусора
Вопрос:
Я пишу интерфейс передачи файлов в Go, который принимает информацию о localpath и удаленном сервере, а затем передает файл по частям. Ситуация такова, что я хочу использовать ее в C #, и я узнаю, что Go может быть встроен в C-Shared dll и вызываться в C # с помощью P / Invoke. Я хочу знать, будет ли собираться мусор из неуправляемой памяти, выделяемой go? Если нет, есть ли способ освободить эту часть памяти?
Ответ №1:
Сборщик мусора не будет знать о неуправляемой памяти кода Go.
Если вы хотите освободить ее, вам следует управлять ею в коде Go или, по крайней мере, подготовить функцию для вызова на C # и удалить неуправляемую память.
Мой совет был бы:
- Функция в Go, которая освобождает память
- Затем вызовите эту функцию в C #, когда вы хотите удалить объект.
Комментарии:
1. У вас это сработало? Не забудьте принять ответ, если он сработал.
2. извините, у меня все еще есть несколько вопросов: поскольку golang собран с мусором, поэтому у него нет функции для освобождения собственной памяти, такой как фрагмент или массив байтов, как будет использоваться эта память? Итак, у меня нет способа вызвать funcs для освобождения памяти go в C #.
3. Когда вы передаете управляемый тип, golang обработает его. Обычно управляемые языки отправляют копию значения, если вы экспортируете функцию (как вы делаете в C #). Но в вашем случае, я думаю, что это по-другому, потому что вы отправляете поток байтов файла на C #. Если вы откроете поток, вы также сможете закрыть его.