Primeiro, unsafe
é útil para muito mais que a interoperabilidade C. Por exemplo, a análise de imagens com dados de pixels reais pode ser terrivelmente lenta enquanto estiver no modo "seguro". Vire para o modo não seguro e, fazendo o mesmo trabalho com acesso direto ao buffer de imagem, é uma ordem de magnitude mais rápida.
Fazer desenvolvimento por atacado em C / C ++ para inclusão em um projeto .Net certamente faz sentido, mas tudo se resume ao desempenho. O conselho clássico seria escrever o aplicativo inteiro no idioma de sua escolha e depois criar um perfil. Quando você encontrar uma seção crítica de código que ocupa mais de 50% do tempo de processamento e não pode mais ser ajustada de forma realista enquanto estiver usando uma linguagem gerenciada, reimplemente essa rotina em C e integre-a.
Um exemplo da vida real: eu estava criando um algoritmo de localização de caminhos. Depois de mostrar que funcionava com C #, eu precisava torná-lo rápido o suficiente para executar várias vezes por segundo. Eu já havia construído uma interface de usuário de suporte agradável em C # que mostrava todos os fatores usados para decisões de roteamento, resultados, etc. Por isso, reimplementei a parte principal do algoritmo de roteamento em C ++. Se eu tivesse iniciado em C ++, duvido que tivesse chegado tão longe.