Às vezes, reconstruindo minha solução, recebo o seguinte erro. A solução é enorme, mais de 270 projetos e não tenho idéia de como me livrar desse erro. Isso acontece às vezes, na maioria das vezes, a solução é compilada corretamente. Eu tenho 32GB de RAM, por isso não é um problema, eu também tenho um ReSharper, um amigo no trabalho não tem, e nunca experimentou o erro, então talvez haja um problema. De qualquer forma, se alguém tem idéia de como consertá-lo, ficaria muito feliz em ouvi-lo;)
C: \ Arquivos de Programas (x86) \ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ Microsoft \ VisualStudio \ v15.0 \ SSDT \ Microsoft.Data.Tools.Schema.SqlTasks.targets (559,5): Erro: MSB4018: A tarefa "SqlBuildTask" falhou inesperadamente. 31 & gt; Microsoft.Data.Tools.Schema.Sql.Build.BuildFailedException: Exceção do tipo 'System.OutOfMemoryException' foi lançada. --- & gt; System.OutOfMemoryException: exceção do tipo 'System.OutOfMemoryException' foi lançada.
Respostas:
Este parece ser um problema conhecido relatado em
Instâncias / conexões de SQLite ilimitadas que contribuem para as falhas do OOM # 22650 .
O problema foi aparentemente resolvido no Visual Studio 2017 versão 15.5, e a correção pode ter sido transferida para 15.4.
A atualização do Visual Studio 2017 para a versão mais recente deve resolver o problema (se é mesmo o mesmo).
Como isso não resolveu o problema, vale a pena notar que o O erro OutOfMemoryException não significa falta de memória, mas sim a impossibilidade de alocando memória. Eu explicarei abaixo porque estes não são os mesmos.
Como o Visual Studio é um programa de 32 bits, seu espaço de memória é limitado a 4 GB. A partir disso, ele pode "usar" apenas cerca de 2 GB para seus dados, o restante usado por Software Windows e para programas. A memória física recebe endereços virtuais neste espaço, de modo que alguns endereços já estão alocados e outros não. Não há mecanismo de coleta de lixo possível, de modo que um endereço, uma vez alocado, fica alocado.
Imagine, por exemplo, que dos 2 GB disponíveis, 100 MB são alocados e um deseja alocar 1 GB adicional. Logicamente, a memória disponível é muito mais que suficiente. No entanto, se os 100 MB forem alocados no meio do espaço de 2 GB, já não é possível atribuir 1 GB de contíguo memória. Nesse caso, a condição OutOfMemoryException será aumentada, embora pareça impossível.
Este caso pode surgir quando a memória é alocada e liberada de tal maneira que os fragmentos de memória alocados estão espalhados pelos espaço de endereçamento e só deixar "buracos" que não são suficientes para um grande alocação.
Portanto, existem apenas duas possibilidades:
Um bug no Visual Studio, como por exemplo, ao tentar aumentar o comprimento de uma instância do
StringBuilder
classe além do que é especificado por sua correnteMaxCapacity
propriedade, também fará com que o Condição OutOfMemoryException.Muitas alocações são feitas, de modo que, mesmo liberadas, a memória é muito fragmentado.
Seu caso parece se encaixar melhor no segundo caso, mas suas opções para um solução aqui são bastante limitadas.
Uma versão de 64 bits do Visual Studio resolveria o problema ampliando o espaço de endereço, mas isso não está no Roteiro do Visual Studio .
Sua outra opção é reduzir a alocação de memória o máximo possível. Você pode reduzir o número de complementos do Visual Studio ou tentar Divida essa enorme solução VS em outras menores. Ou você pode fechar e reiniciar o Visual Studio, uma vez que algumas alocações de memória são feitos em paralelo por threads do Visual Studio, então existe um elemento envolvido.
fonte