Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

227
Visualizações
¿Cuál es la diferencia entre el montón administrado y el montón nativo en la aplicación c#?

De este http://blogs.msdn.com/b/visualstudioalm/archive/2014/04/02/diagnosing-memory-issues-with-the-new-memory-usage-tool-in-visual-studio.aspx

  1. Administrado: para las aplicaciones administradas, el generador de perfiles solo recopila información del montón administrado de forma predeterminada. La creación de perfiles de almacenamiento dinámico administrado se realiza mediante la captura de un conjunto de eventos CLR ETW en el generador de perfiles.
  2. Nativo: para las aplicaciones nativas, el generador de perfiles solo recopila información de almacenamiento dinámico nativo. Para recopilar información de almacenamiento dinámico nativo, habilitamos el seguimiento de pila y la recopilación de seguimientos de almacenamiento dinámico (ETW), que son muy detallados y crearán archivos de sesión de diagnóstico de gran tamaño.

Mi pregunta es en mi programa c# (solo tengo código c# con archivos xaml), ¿qué tipo de objeto irá al montón administrado y qué tipo va al montón nativo? ¿Y cómo puedo especificar el tamaño máximo de cada montón cuando se ejecuta mi aplicación? Supongo que GC solo se ejecuta en un montón administrado, ¿es correcto?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Cuando crea un objeto usando el operador new en C# (o el operador correspondiente en cualquier otro lenguaje CLR), el tiempo de ejecución de .NET asigna memoria en el "montón administrado" (simplemente un montón administrado por el tiempo de ejecución de .NET + el recolector de elementos no utilizados) . Este es, en realidad, uno de los dos montones: uno destinado a objetos de menos de 85K de tamaño y el otro a objetos más grandes (matrices grandes y similares). De cualquier manera, cuando se asigna un objeto de este tipo, no obtiene un puntero real que describa la dirección del espacio asignado como lo haría en código nativo. Lo que obtienes de vuelta es un "mango", que representa una indirección a esa dirección de memoria. Esta indirección existe porque la ubicación real de la memoria puede cambiar cuando el GC recopila y compacta el montón.

Sin embargo, cuando desee hablar con código no administrado/nativo que espera un puntero, debe usar punteros, no identificadores. .NET proporciona dos métodos para convertir un identificador de .NET en un puntero sin procesar que se puede pasar a código no administrado.

  1. Asigne memoria en el montón de NT (o nativa o no administrada) usando Marshal.AllocHGlobal o Marshal.AllocCoTaskMem y use un bloque fijo o IntPtr.ToInt32 / ToInt64 para obtener el puntero subyacente. Asegúrese de llamar a Marshal.FreeHGlobal / Marshal.FreeCoTaskMem o de que el código no administrado libere la memoria correctamente (FreeAlloc/CoTaskMemFree en Windows).
  2. Si sus datos son blittables (que es probablemente el caso cuando interopera con código nativo), simplemente puede anclar estos datos administrados con GCHandle.Alloc y luego llamar al código nativo con el puntero sin procesar obtenido de GCHandle.AddrOfPinnedObject , liberando el pinning ( usando GCHandle.Free ) cuando haya terminado. También puede obtener la dirección del puntero subyacente real de un objeto administrado y anclar temporalmente dentro de un bloque " fijo " en C#.

¡Espero que esto ayude!

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda