código inseguro e declarações fixas com StringBuilder
-
13-09-2019 - |
Pergunta
Eu estava pensando sobre como passar uma String ou um StringBuilder para uma função C que mostrar uma string com o parâmetro. Eu encontrei uma grande resposta em
Chamar função não gerenciada de C #: I deve passar StringBuilder ou usar o código inseguro
?Mas eu tenho uma dúvida. Qualquer um pode me explicar por que o coletor de lixo não mudar o local da (gerenciado) instância StringBuilder durante a execução função importada?
Solução
Consulte Padrão Marshaling para Cordas para obter detalhes sobre como corda e StringBuilder é empacotado quando usando cOM e P / invocação. Ela não diz explicitamente por o padrão de uso é seguro, mas não indica que o uso de cordas e StringBuilder para P / Invoke é suportado e comportamento pretendido. Eu suspeito que o sistema de triagem cuida de fixação do tampão para a duração da chamada externa, impedindo que o GC de se mudar-lo.