Página 1 de 3

Dotnet Core 3 - Hello World (Apenas 40 megabytes de memória)

MensagemEnviado: 24 Set 2019 10:54
por Rodrigo_P_A
Resolvi testar o dotnet Core 3 da Microsoft, realmente a ferramenta ajuda desenvolver rápido etc... muitas bibliotecas e muta gente disponível para programar em C#, Vb.Net etc...

dotnetcore3.png



Um simples Hello World, consume 40 megabytes de RAM....

dotnetcore-4.png



Complementando. A aplicação consome: 4.6 megabytes + 20.6 megabytes de memória compartilhada ( www.csl.mtu.edu/cs4411.ck/www/NOTES/process/shm/what-is-shm.html )

dotnetcore-4.png



-----------------

Conclusão, o dotnet é fácil de usar, tem várias ferramentas etc... mas se você quer performance e realmente otimizar recursos, num existe nada igual ao C/C++, não adianta.

Re: Dotnet Core 3 - Hello World (Apenas 40 megabytes de memó

MensagemEnviado: 24 Set 2019 11:11
por Rodrigo_P_A
os anexos estão fora de ordem, algum bug no forum, só pra esclarecer num tem print nenhum de C/C++, todos são da aplicação rodando Dotnet Core 3 em um debian 8.5

Re: Dotnet Core 3 - Hello World (Apenas 40 megabytes de memó

MensagemEnviado: 24 Set 2019 11:44
por pamv
Rodrigo os 44.844 já estão sendo consumidos pelo que está executando no sistema, em princípio o executável é só 4 ou 5M. Qual é o tamanho do .OBJ ? O que tem dentro dele além do Hello World?

Re: Dotnet Core 3 - Hello World (Apenas 40 megabytes de memó

MensagemEnviado: 24 Set 2019 11:50
por Rodrigo_P_A
pamv escreveu:Rodrigo os 44.844 já estão sendo consumidos pelo que está executando no sistema, em princípio o executável é só 4 ou 5M. Qual é o tamanho do .OBJ ? O que tem dentro dele além do Hello World?


Sim, shared memory, mas é usado compartilhada pelo processo.

"Apenas 4MB" hehehe ? Para escrever um hello world?

Executável tem: 85Kbytes + 1 dll de 5kbytes

É um negocinho legal, mas tenho aplicação com interface gráfica completa e faz tudo e num usa isso de memória RAM.

Re: Dotnet Core 3 - Hello World (Apenas 40 megabytes de memó

MensagemEnviado: 24 Set 2019 12:07
por Rodrigo_P_A
Veja só um aplicativo que eu fiz , em C/C++.

Ele é servidor Web, aceita várias conexões de dispositivos remotos, tem algorítimos para identificar biometria e veja o uso de memória:


nativo.png

Re: Dotnet Core 3 - Hello World (Apenas 40 megabytes de memó

MensagemEnviado: 24 Set 2019 12:35
por pamv
Rodrigo_P_A escreveu:
pamv escreveu:
"Apenas 4MB" hehehe ? Para escrever um hello world?



Por isso eu perguntei o que tem dentro do obj
Eu não sou usuário e não conheço ferramentas do windows, no unix eu usaria o comando size, ldd,nm, etc pra examinar o "obj" e o "exe"

Se o windows soma o tamanho total das libs dll usadas como tamanho do executável então até o linux passaria vergonha nesse quesito mas seria uma medida irreal

Re: Dotnet Core 3 - Hello World (Apenas 40 megabytes de memó

MensagemEnviado: 24 Set 2019 12:43
por Rodrigo_P_A
Entendi, mas veja a comparação que eu postei.

Re: Dotnet Core 3 - Hello World (Apenas 40 megabytes de memó

MensagemEnviado: 24 Set 2019 13:17
por pamv
Eu vi, de fato, o .NET é comilão de memória mas realmente eu não entendo como o windows lida com os detalhes dos processos e o que significam de fato esses números. O top (e o ps) do Unix é mais informativo para mim pois separa em memória virtual, residente e shared durante a execução e os nm, size, ldd, etc informam sobre o executável.
Você tem como compilar esse hello e gerar um executável estático só pra ver a diferença de tamanho dos arquivos?

Re: Dotnet Core 3 - Hello World (Apenas 40 megabytes de memó

MensagemEnviado: 24 Set 2019 13:22
por Rodrigo_P_A
Não conheço o dotnetcore, nem sei como compilar "estático" nem sei se isso é possível. Mas, pelo menos para mim, o que importa é: é um simples hello world!

O comparativo que coloquei acima, só para ter ideia, o meu executável tem 13 MB e consome menos memória do que o Hello World do dotnetcore3.

Mas como disse, é muito mais fácil aprender usando o dotnetcore, C#, VB.net do que c/c++, então dependendo da política da empresa o dotnetcore pode ser uma alternativa interessante, acho que vai ter mais oferta de mão de obra. As ferramentas integradas com o Visual Studio facilitam muito para o desenvolvedor.

Pode ser uma alternativa mais fácil também para criar aplicações para sistemas embarcados, já que o dotnetcore tem para linux ARMHF e ARM64 tbm.

Não fiz comparativo ainda comparando uma aplicação Web backend em php VS dotnetcore para ver quem leva a melhor em uso de memória, quando eu tiver um tempo vou fazer.

Re: Dotnet Core 3 - Hello World (Apenas 40 megabytes de memó

MensagemEnviado: 24 Set 2019 13:44
por pamv
Rodrigo
Quando você gera um executável estático você manda o link loader adicionar todas as funções de biblioteca que ele necessita de forma que ele possa executar sem a necessidade da presença delas no sistema, isso impacta no tamanho e também no desempenho mas tem suas aplicações. Se desse para você gerar a versão estática daria para ter uma idéia se essa gordura toda é usada pelo seu programa ou não. Abaixo um exemplo dessa diferença de tamanho dos executáveis com um programinha de benchmark
Código: Selecionar todos
-rwxrwxr-x 1 pamv pamv 922608 Set 24 12:48 flops-static.x
-rwxrwxr-x 1 pamv pamv  18544 Set   1  22:26 flops.x


E aqui a diferença de tamanho deles executando, repare como muda

Código: Selecionar todos
  PID USER     PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 6780 pamv   20   0    1128      4         0  R  100,0  0,0   0:05.11 flops-stat
 6785 pamv   20   0    4364    648    580  R  100,0  0,0   0:04.91 flops.x


O desempenho também muda bastante entre uma versão e outra. Bom, era isso.

Re: Dotnet Core 3 - Hello World (Apenas 40 megabytes de memó

MensagemEnviado: 24 Set 2019 13:56
por Rodrigo_P_A
Eu sei gerar estático usando gcc, não sei gerar usando o dotnetcore, acho que nem dá pois ele é código gerenciado, não nativo.

Eu pensei que o uso de memória pelo dotnet fosse um pouco mais inteligente, sobre teste de benchmark etc... eu num fiz nada disso.

Re: Dotnet Core 3 - Hello World (Apenas 40 megabytes de memó

MensagemEnviado: 24 Set 2019 14:08
por pamv
O teste de benchmark era o programa que eu tinha mais a mão para falar das diferenças entre executável estático e dinâmico e não para falar de desempenho.
Gostaria de ter usado algo como o xterm que usa janelas mas teria que baixar os fontes. Olhando no google parece que não é comum alguem perguntar sobre executáveis estáticos no dotnet

Re: Dotnet Core 3 - Hello World (Apenas 40 megabytes de memó

MensagemEnviado: 24 Set 2019 14:10
por Rodrigo_P_A
pamv escreveu:O teste de benchmark era o programa que eu tinha mais a mão para falar das diferenças entre executável estático e dinâmico e não para falar de desempenho.
Gostaria de ter usado algo como o xterm que usa janelas mas teria que baixar os fontes. Olhando no google parece que não é comum alguem perguntar sobre executáveis estáticos no dotnet



Quais diferenças vc já percebeu entre código nativo estático x link dinamico?

Re: Dotnet Core 3 - Hello World (Apenas 40 megabytes de memó

MensagemEnviado: 25 Set 2019 09:41
por Rodrigo_P_A
Mais um teste, um simples website em Asp.Net Core 2.0 .... 400MB de RAM.


aspnetcore.png

Re: Dotnet Core 3 - Hello World (Apenas 40 megabytes de memó

MensagemEnviado: 25 Set 2019 12:20
por tcpipchip
Ou seja, 400Mb é loucura ?