Paralelismo em .NET | C# Avançado | Aumentando a performance de processos

Поділитися
Вставка
  • Опубліковано 22 січ 2025

КОМЕНТАРІ • 26

  • @psouzasouza1170
    @psouzasouza1170 4 місяці тому

    Show

  • @thiago.marcal
    @thiago.marcal 2 роки тому +4

    Ótima aula! Além disso, apresentou um exemplo de programação do mundo real, coisa que muitos canais nao fazem, ficando so nos exemplos básicos.

  • @cleberferreira7230
    @cleberferreira7230 Рік тому +2

    Show de aula, ótima didática, clareza e objetividade .

  • @GabrielLopes-up3pk
    @GabrielLopes-up3pk 7 місяців тому +1

    Excelente conteúdo 👏🏽👏🏽👏🏽👏🏽

  • @darkside3ng
    @darkside3ng 7 місяців тому

    Aula, fantástica.

  • @extremehl7124
    @extremehl7124 2 роки тому +1

    Nossa, que aula ein, parabéns!!!!! Continue Assim!

  • @arthurleite
    @arthurleite Рік тому +1

    Muito top sua abordagem. Precisamos sair do básico mesmo e não há muitos vídeos avançados no youtube. Inscrito. Sugestão de vídeos que não encontrei no canal: Generics, Reflection e tbm seria top um vídeo sobre rotinas executadas em paralelo pelo Hangfire ou outra biblioteca. Valeuu

    • @CentraldotNET
      @CentraldotNET  Рік тому +1

      Rapaz o próximo vídeo é justamente sobre Reflection, vou soltar entre dia 7 ou 8 de março, grande abraço

  • @adilsoncapita9736
    @adilsoncapita9736 Рік тому

    Massa!

  • @dionemaciel3894
    @dionemaciel3894 Рік тому

    Excelente

  • @eversoncoutinhooficial
    @eversoncoutinhooficial Рік тому

    Muito obrigado pela aula

  • @diguu4407
    @diguu4407 2 роки тому

    sensacional seu conteúdo meu querido, parabéns!!
    +1 inscrito

  • @christianferreira3463
    @christianferreira3463 Рік тому

    Uma das melhores aulas, top d++++, só fiquei com a dúvida de como descubro quantos nucleos lógicos temos no meu serviço como disponivel, mas isso vou de pesquisa agora.

    • @CentraldotNET
      @CentraldotNET  Рік тому

      E ae tudo bem ? Você descobre isso a partir das especificações do seu processador, no meu caso é um Ryzen 7 8 núcleos e 16 threads, o número de threads que vale para definir o limite máximo de processadores, como no exemplo você pode limitar essa quantia configurando a instância antes de usá-la.

  • @lucasbatistadelemos2101
    @lucasbatistadelemos2101 2 роки тому

    Muito bom o conteúdo, obrigado.

  • @QueLocoTio
    @QueLocoTio 2 роки тому

    Conteúdo muito top, me ajudou muito!

  • @TaniSales
    @TaniSales Рік тому

    Eu gostei muito do vídeo eu só tenho uma dúvida se eu tenho um sistema com alta volumetria onde vou precisar cadastrar milhoes de registros. Nesses casos o mais recomendado seria usar o paralelismo ?

    • @CentraldotNET
      @CentraldotNET  Рік тому

      Olá tudo bem ? Essa abordagem de paralelismo é interessante mas sempre deve ser as últimas opções devido a complexidade de compreender e organizar as estruturas, mas sim pode ser uma aliada se bem implementada. Qualquer dúvida estou a disposição.abracos

  • @alvarobernardi1
    @alvarobernardi1 2 роки тому

    Primeiramente parabéns pela aula e ganhou mais 1 like e mais 1 inscrito.
    O exemplo que vc apresentou foi muito bom também, é o primeiro que vejo utilizar em exemplo real.
    Gostaria se possível me dar uma luz, comecei a pouco tempo com o C# e estou com um problema de performance em uma aplicação minha e estou estudando várias possibilidades, lembrei que tinha o thread, e ai vi que nas versões mais recentes o task veio para melhorar, e agora na sua aula conheci o paralelismo e acho que agora seria o melhor para mim, más o meu caso é o seguinte.
    Tenho uma aplicação que preciso abrir 10 planilhas ( no total de 54 milhões de registros ), pegar os dados linha a linha e verificar se a empresa esta cadastrada ou não e se precisa de atualização, só que esse processo que já esta rodando, demora cerca de 11 a 12 dias e roda com o banco mysql.
    Minha idéia inicial seria criar 3 variáveis lists, contendo o caminho para as planilhas e rodar elas em 3 tasks, más nesse caso da aula, será que eu poderia criar uma função para cada planilha ( onde vai abrir a planilha e ler linha a linha ) e mandar rodar as funções dentro do parallel.foreach ?
    Será que eu poderia ter algum problema quando 2 ou mais informações forem jogadas para o módulo cadastroempresa ao mesmo tempo?

    • @alvarobernardi1
      @alvarobernardi1 2 роки тому

      Estava assistindo novamente o vídeo para poder montar o meu esquema, e me veio outra perguntar quanto ao que vc falou no vídeo a partir do 34:10 sobre as informações tem que ser processadas antes e depois poder colocar no processo paralelo, nesse módulo que quero montar as planilhas de leitura são enormes e cada variável sua do ceps[], iria corresponder a uma função minha direcionada para cada planilha ( que faz a abertura da planilha e irá percorrer até o final e mandando os dados para o módulo de cadastro ) , nesse caso será que iria acontecer o problema que vc comentou de perda do objeto?
      Pois cada objeto já esta definido, objeto 0 abre planilha e lê planilha 1, objeto 1 abre planilha e lê planilha 2 etc etc etc , e o processamento de leitura dos dados da planilha e envio dos dados ( caso necessário para o banco de dados) , esses sim estariam sendo feitos em paralelo

    • @CentraldotNET
      @CentraldotNET  2 роки тому +1

      Olá Álvaro tudo bem ? Existem diversas formas de fazer isso, eu mesmo já utilizei várias delas, acho que o seu tempo atual de processamento está muito alto mesmo para um single thread. Quando precisamos de performance o ideal é sempre vir subindo os níveis de memória, exemplo, você está com uma planilha em um HD que é mais lerdo que uma RAM, então tente carregar esses dados na RAM para processar posteriormente, o processamento será realizado em uma região da CPU muito mais rápida então para utilizar todo o potencial do seu chip o interessante seria ter esses dados disponíveis com a mínima latência possível. Outra forma de fazer isso é utilizar as próprias ferramentas do SQL para carregar os dados em tabelas. Você pode utilizar também um sistema de árvore de seleção nessa planilha e ler uma a uma com o máximo de thread possível, porque digo isso, vamos supor que encontre a info que deseja, não precisará gastar processamento com as outras entende ?

    • @alvarobernardi1
      @alvarobernardi1 2 роки тому

      @@CentraldotNET Primeiramente agradeço pela ajuda.
      No caso em questão entendi o que seria essa árvore de seleção, más o que preciso mesmo fazer é passar por todas as linhas de cada planilha, pois o que eu preciso ver é se a informação que esta na linha lida se encontra no banco de dados e ai não poderia dispensar o restante dos dados, pois tenho a necessidade de ler mesmo.
      using (var reader = new StreamReader(fs))
      while ((line = reader.ReadLine()) != null)
      {
      LinhaLimpa = line.Replace("\";", "ƒ"); // alt 159
      LinhaLimpa = LinhaLimpa.Replace("\"", "").Replace("'", " ").Replace("\\", "");
      var parts = LinhaLimpa.Split('ƒ');
      if (parts[19] == "SP")
      {
      Application.DoEvents();
      Empresas Empr = new Empresas
      {
      CnpjBasico = parts[0],
      CnpjOrdem = parts[1],
      CnpjDv = parts[2],
      .
      .
      .}
      Empresas.GravarTratamento(Empr);
      Esse é o trecho que uso, eu pego a linha da planilha, faço a separação dela, porque todos os dados vem em uma única linha, verifico se a empresa é de SP e mando para a classe Empresa e mando gravar, nessa gravação eu verifico se já existe ou não e é ai que vejo se precisa incluir ou alterar.
      Por isso que fiquei na dúvida se eu poderia perder o objeto, quanto vc deu o alerta no final do vídeo.
      Eu ainda não sei como subir todos os dados da planilha para a memória, eu cheguei a tentar fazer algo assim, e travou, pois a planilha é muito grande mesmo, tem cerca de 5 milhões de empresas cada planilha, o tamanho em disco da mais de 1gb cada planilha

    • @CentraldotNET
      @CentraldotNET  2 роки тому

      @@alvarobernardi1 Mande um email com mais detalhes, posso te ajudar.

  • @TecnoPlayCanal
    @TecnoPlayCanal 2 роки тому

    ótimo aula. Uma duvida, caso setar algum valor MaxDegreeOfParallelism e não tiver nucleos disponiveis, o que ocorre neste caso?

    • @CentraldotNET
      @CentraldotNET  2 роки тому

      Esse é um valor para limite, se você colocar um valor acima do disponível na máquina ele irá usar o máximo disponível