Quais são as vantagens para o desenvolvimento de um aplicativo Win32 em C ++ sobre um .NET aplicativo em C #?

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

Pergunta

Eu aprendi janelas de programação usando o Visual C ++, e a API Win32. Hoje em dia, parece que a maioria dos aplicativos estão sendo desenvolvidos em .NET usando C #. Eu entendo que na maioria das vezes não há muita diferença de desempenho entre código nativo e código gerenciado. Então, eu estou querendo saber, se eu fosse para começar a escrever um novo aplicativo de desktop de hoje, há alguma razão (além do fato de que eu estou mais familiarizado com C ++), que eu poderia querer escrevê-lo em C não conseguiu ++ vez de .NET? Ainda existem algumas vantagens em usar C ++ e código nativo? Ou será que esse método foi mais ou menos substituída por .NET na plataforma Windows?

É claro que eu sei que as pessoas que estão escrevendo drivers de dispositivo de baixo nível e programas similares não iria fazê-lo em .NET. Estou perguntando com referência a aplicações típicas voltados para o cliente que não fazem chamadas de hardware diretos.

Foi útil?

Solução

  • Desempenho (certas situações, tais como gráficos)
  • footprint de memória (como Mancuso disse)
  • O uso de bibliotecas existentes
  • Não há necessidade de um tempo de execução
  • controle Finer

Para listar alguns.

No entanto, você também pode querer olhar para a questão do ângulo oposto para bastante avaliar qual a linguagem para uso.

Além disso, você poderia usar C ++ / CLI para incorporar tanto código nativo e .net.

Outras dicas

OMI o mais importante para pequenas aplicações descarregáveis ??é que o código nativo não precisa do tempo de execução .NET. Embora a banda larga se torna cada vez mais comum não quase todo mundo tem isso ainda.

Algumas pessoas podem ficar desapontados ao ver que a sua aplicação 2 MB realmente requer outra 20MB de baixar quadro e um processo incômodo de instalação para ser executado. Se eles não tem certeza se quer ou não que eles realmente precisam de sua aplicação, em primeiro lugar, eles só poderão excluí-lo antes mesmo de dar-lhe uma tentativa e se voltam para um produto concorrente.

Se seu aplicativo precisa para ser capaz de executar sem uma instalação (ou seja, se você não pode ou não deve fazer algo como instalar o .NET framework), você não pode contar com .NET estar em uma máquina Windows ( pré-Vista). Lotes de aplicações de utilidade pode cair nesta categoria.

Eu recomendaria para escrever cada aplicação desktop em código gerenciado . .NET / C # é uma grande plataforma para fazê-lo.

As minhas razões:

  1. penalidade de desempenho é insignificante . Google para benchmarks se você não levar a minha palavra. O que importa mais é o próprio código. Pode escrever algoritmos S (^ m n) em C ++ ou .NET / C #. motores JIT são muito maduros esses dias.
  2. C ++ não gerido tem grandes desvantagens quando se trata de teste de unidade, e zombando refatorando . É muito complicado e inflexível. Reflexão permite que o código gerenciado para fazer tais coisas muito conveniente.
  3. A implantação é um pequeno problema. No entanto, criar uma configuração que verifica as condições prévias necessárias .NET e os instala automaticamente é uma escolha óbvia não.
  4. Compilação é mais rápido, não vinculador ! Ele ainda acontece em segundo plano quando você editar o código.
  5. .NET apoio de biblioteca é a maneira melhor e mais limpo do que STL, MFC e impulso.
  6. Não há arquivos de cabeçalho e macros . Eles estão apenas propenso a erros.
  7. Segurança ! Adeus buffer overflows, ponteiros ruins, variáveis ??não inicializadas ...
  8. Exceções . hierarquia clara exceção no .NET. exceções C ++ estão bagunçados.

footprint de memória. Mas a menos que você está desenvolvendo para uma máquina seriamente prejudicada memória-wise, ele realmente não deve ser um problema para a maioria das aplicações.

Se você pode pagar a dependência na pilha, ir para .NET Moderno, elegante, poderosa e, como resultado muito mais rápido para desenvolver para.

Mas perceber que você encadear seu aplicativo para isso -. À linguagem e do quadro, se você forsee um futuro onde você pode querer escapar isso, então é melhor pensar duas vezes

Win32 é velho e desajeitado, mas funciona em praticamente qualquer versão do Windows sem dependências extra, e seu código pode ser na planície, portátil, C / C ++.

+1 para não ter que requerem um pacote .NET / instalar na máquina de destino (s). Este ainda é um grande problema.

Quando todas as máquinas têm mono ou NET não será um negócio tão grande.

Duas coisas que eu posso pensar.

  1. A protecção da propriedade intelectual. É infinitamente mais difícil para alguém para fazer engenharia reversa de um aplicativo não gerenciado C ++. Gerenciados aplicativos .NET ou Java pode ser facilmente de-compilou este não é o caso de não gerenciado C ++.

  2. Speed. C ++ está mais perto de hardware e tem um menor consumo de memória como o outro comentário mencionados. É por isso que a maioria dos jogos de vídeo continuam a ser escrito em C ++ e em linha de montagem.

programas

Net também têm uma vida útil de apoio, onde nativa realmente não. Nativo será executado por muitos anos em diferentes OS do sem a necessidade de atualizações.

.Net programas podem ser metralhado por configuração .Net ruim, nativo só continua a correr e quase não é efectuada por atualizações do sistema operacional.

.Net programas de inicialização lenta e sentir começa lento, nativos rápida e impressões rápidas.

Net tem de ser codificado para menor denominador comum (a maioria distribuída versão do framework), Native compila todo o código no aplicativo - para usar o que você quer

.

Use Delphi para Native, não C ++. Net é parcialmente baseado em Delphi RAD e backend Java.

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