Pergunta

Eu sou novo para C # / Java e um plano para o protótipo que para o sistema em tempo real macio.

Se eu escrevi aplicativo C # / Java da mesma forma como eu faço em C ++ em termos de gerenciamento de memória, isto é, eu explicitamente "excluir" os objetos que eu já não uso, então seria o aplicativo ainda ser afetadas pelo coletor de lixo? Se sim, como isso afeta meu aplicativo?

Desculpe se isso soa como uma resposta óbvia, mas sendo novo, eu quero estar completa.

Foi útil?

Solução

Dê uma olhada da IBM Metronome , o lixo coletor para duro sistemas de tempo real.

Outras dicas

A sua premissa é errada:. Você não pode explicitamente “delete” objetos em Java ou C #, assim que sua aplicação será sempre afetado pela GC

Pode tentar desencadear uma coleção chamando GC.Collect (C #) com um parâmetro adequado (por exemplo GC.MaxGeneration), mas esta ainda não garante que o GC não estará trabalhando em outros momentos durante execução.

Por explicitamente "delete" se você quer dizer liberar a referência para o objeto, então você é dependente do coletor de lixo em C # código gerenciado - consulte a classe System.gc maneiras de controlá-lo.

Se você optar por escrever código não gerenciado C #, então você terá mais controle sobre a memória, semelhante a C ++, e será responsável por excluir os objetos instanciado, capaz de usar ponteiros, etc. Para mais informações consulte MSDN doc -. Código inseguro e ponteiros (C # Guia de Programação)

No código não gerenciado você não vai estar à mercê do o coletor de lixo e seus algoritmos de limpeza indeterminado.

Eu não sei se o Java tem um modo não gerenciado equivalente, mas esta Microsoft informações podem ajudar dar algumas indicações sobre C # /. NET para usar seus recursos disponíveis para sua exigência de lidar com o coletor de lixo.

Em Csharp ou Java você não pode objecto de exclusão. O que você pode fazer é só marcá-los disponíveis para exclusão. O up gratuito de memória será feito pelo Garbage Collector .. Pode ser o caso de coletor de lixo não pode ser executado durante o tempo de vida de sua aplicação. No entanto, é provável funcionar. Quando o sistema está se tornando falta de recursos é o momento mais provável quando rotinas GC são executados pelo tempo de execução. E quando os recursos são baixos GC se torna o maior segmento prioridade. Portanto, o seu pedido não se efetuado. No entanto, você pode minimizar o efeito através do cálculo da carga correta e recursos necessários para o seu tempo de vida da aplicação e certifique-se de comprar o hardware certo que é bom o suficiente para isso. Mas ainda assim você não pode simplesmente marca de banco seu desempenho.

Além de apenas GC o aplicativo gerenciado fazer chegar uma ligeira sobrecarga sobre a aplicação tradicional C ++ devido à camada delegação extra envolvido. E um ligeiro panelty primeira performance vez desde as necessidades de tempo de execução para ser instalado e funcionando antes de sua aplicação começar.

Aqui estão algumas referências para o desenvolvimento de sistemas de tempo real com o .NET Compact Framework:

Os dois falam sobre os requisitos de memória utilizando o framework .NET.

C # e Java não são para o desenvolvimento em tempo real. Soft-tempo real é atingível, porém, como você nota.

Para C #, o melhor que você pode fazer é implementar o / padrão dispor finalize:

http://msdn.microsoft.com/ en-us / library / b1yfkh5e (VS.71) .aspx

Você pode pedido -lo para coletar, mas normalmente é muito melhor em determinar como fazer isso.

http://msdn.microsoft. com / en-us / library / System.gc (VS.71) .aspx

Para Java, há muitas opções para otimizar-lo:

http://java.sun.com/docs/hotspot /gc5.0/gc_tuning_5.html

Junto com soluções de terceiros, como IBM Metronome como mencionado acima.

Esta é uma ciência real dentro de si CS.

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