Qual é a melhor maneira de encontrar TODA a sua memória ao desenvolver no Compact Framework?

StackOverflow https://stackoverflow.com/questions/10309

  •  08-06-2019
  •  | 
  •  

Pergunta

Eu usei o CF Monitor de desempenho remoto, no entanto, isso parece rastrear apenas a memória inicializada no mundo gerenciado, em oposição ao mundo não gerenciado.Bem, só posso presumir isso porque os números listados no criador de perfil estão muito aquém do máximo permitido (32 MB no CE 5).O perfil de um aplicativo específico com o RPM me mostrou que o uso total de todos os caches só consegue chegar a cerca de 12 MB e depois diminui lentamente à medida que (presumo) algo não gerenciado começa a reivindicar mais memória.O controle deslizante de memória no Sistema também mostra que o dispositivo está com pouca memória.Se eu encerrar o processo, o controle deslizante mostrará toda a memória voltando.Então deve (?) ser esse processo gerenciado que está engolindo a memória.

Existe alguma maneira simples (ish?) de como rastrear o uso de memória não gerenciada de alguma forma que possa me permitir combiná-lo com as chamadas P/Invoke correspondentes?

EDITAR:Para todos vocês que remarcam, não é .NET, marcar a pergunta assim confunde as coisas.É .NETCF/Estrutura Compacta.Eu sei que eles parecem semelhantes, mas são diferentes porque o .NET é demais, enquanto o CF é basicamente apenas um wrapper em torno de NotImplementedException.

Foi útil?

Solução

Tente ativar Registro de interoperabilidade.

Além disso, se você tiver acesso ao código da DLL nativa que está usando, verifique isto: http://msdn.microsoft.com/en-us/netframework/bb630228.aspx

Outras dicas

Definitivamente, tenho lutado com problemas não gerenciados em um aplicativo gerenciado em C# há algum tempo - não é fácil.

O que descobri ser mais útil é ter uma saída regular para um arquivo de log de texto.Por exemplo, você pode imprimir a saída de Status da memória global a cada dois minutos junto com o registro sempre que você carrega um novo formulário.A partir daí você pode pelo menos ver que a memória se desgasta gradualmente ou que grandes pedaços de memória desaparecem em horários específicos do dia.

Para nós, encontramos uma perda gradual de memória durante todo o dia, enquanto o dispositivo estava sendo usado.A partir daí, finalmente descobrimos que o dispositivo de leitura de código de barras estava sendo inicializado sem nenhum motivo específico em nossa classe base Form (eu culpo o desenvolvedor anterior!:-)

Configurar esse registro pode ser um pouco complicado, mas para nós ele rendeu enormes dividendos no longo prazo, especialmente com o dispositivo em uso ativo, podemos obter dados reais, instrumentação, rastreamentos de pilha de exceções, etc.

Ok, estou usando C++ no CE, não C#, então isso pode não ser útil, mas...

Eu uso um pacote chamado Caixa de ferramentas Entrk que monitora o uso de memória e recursos, vazamentos e exceções no Windows CE.Muito parecido com uma versão CE leve do Boundschecker.Faz o truque na maioria das vezes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top