MSB4018: A tarefa “SqlBuildTask” falhou inesperadamente ==> System.OutOfMemoryException

0

À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.

kubwosz
fonte
(x86) parece que você está usando um processo de 32 bits que resultaria em um limite de 4 GB de memória para o processo (e o processo solicitando mais que isso). Verifique novamente usando o gerenciador de tarefas que o processo está sendo executado no modo de 64 bits.
Gizmo
@Gizmo - O Visual Studio sendo um processo de 32 bits não é a causa deste problema.
Ramhound

Respostas:

0

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:

  1. 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 corrente MaxCapacity propriedade, também fará com que o Condição OutOfMemoryException.

  2. 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.

harrymc
fonte
Infelizmente, eu tenho a versão mais recente. Eu baixei todos os novos VS cerca de um mês atrás, e mesmo após a atualização, isso não ajudou. Alguns coworkes também têm o mesmo problema.
kubwosz
Eu adicionei a minha resposta.
harrymc