MSB4018: La tâche “SqlBuildTask” a échoué de manière inattendue ==> System.OutOfMemoryException

0

Parfois, en reconstruisant ma solution, je reçois une erreur suivante. La solution est énorme, plus de 270 projets et je ne sais pas comment me débarrasser de cette erreur. Cela arrive parfois, la plupart du temps, la solution est construite correctement. J'ai 32 Go de RAM, donc ce n'est pas un problème, j'ai aussi un ReSharper, un ami au travail ne l'a pas, et je n'ai jamais vécu l'erreur, alors peut-être qu'il y a un problème. En tout cas, si quelqu'un a une idée de comment le réparer, je serais très heureux de l'entendre;)

C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Professionnel \ MSBuild \ Microsoft \ VisualStudio \ v15.0 \ SSDT \ Microsoft.Data.Tools.Schema.SqlTasks.targets (559,5): Erreur: MSB4018: La tâche "SqlBuildTask" a échoué de manière inattendue. 31> Microsoft.Data.Tools.Schema.Sql.Build.BuildFailedException: une exception de type 'System.OutOfMemoryException' a été levée. ---> System.OutOfMemoryException: une exception de type 'System.OutOfMemoryException' a été levée.

Kubwosz
la source
(x86) semble indiquer que vous utilisez un processus 32 bits, ce qui entraînerait une limite de 4 Go de mémoire pour le processus (et le processus demandant plus que cela). Vérifiez à l'aide du gestionnaire de tâches que le processus est en cours d'exécution en mode 64 bits.
Gizmo
@Gizmo - Visual Studio étant un processus 32 bits n'est pas la cause de ce problème.
Ramhound

Réponses:

0

Cela semble être un problème connu signalé dans
Instances / connexions SQLite non liées contribuant aux échecs du MOO # 22650 .

Le problème a apparemment été résolu dans Visual Studio 2017 version 15.5 et le correctif a peut-être été rétroporté à 15.4.

La mise à jour de Visual Studio 2017 vers la version la plus récente devrait résoudre le problème (s'il en est de même).


Puisque cela n'a pas résolu le problème, il convient de noter que l'erreur OutOfMemoryException ne signifie pas un manque de mémoire, mais plutôt l'impossibilité d' allouer de la mémoire. Je vais expliquer ci-dessous pourquoi ce ne sont pas les mêmes.

Comme Visual Studio est un programme 32 bits, son espace mémoire est limité à 4 Go. À partir de là, il ne peut "que" utiliser environ 2 Go pour ses données, le reste utilisé par les logiciels Windows et ses programmes. La mémoire physique se voit attribuer des adresses virtuelles dans cet espace, de sorte que certaines adresses sont déjà attribuées et d'autres pas. Il n'y a pas de mécanisme de récupération de place possible, de sorte qu'une adresse, une fois allouée, reste allouée.

Imaginons, par exemple, que sur les 2 Go disponibles, 100 Mo soient alloués et que l’on souhaite allouer 1 Go supplémentaire. Logiquement, la mémoire disponible est bien plus que suffisante. Cependant, si les 100 Mo sont alloués au milieu de l'espace de 2 Go, il n'est plus possible d'allouer 1 Go de mémoire contiguë . Dans ce cas, la condition OutOfMemoryException sera élevée, bien qu'elle semble carrément impossible.

Ce cas peut se produire lorsque la mémoire est allouée et libérée de manière à ce que les fragments de mémoire alloués soient dispersés dans l'espace d'adressage disponible et ne laissent que des "trous" insuffisants pour une allocation importante.

Par conséquent, il n'y a que deux possibilités:

  1. Un bogue dans Visual Studio, comme par exemple lorsque vous essayez d'augmenter la longueur d'une instance de la StringBuilderclasse au-delà de celle spécifiée par sa MaxCapacitypropriété actuelle , provoquera également la condition OutOfMemoryException.

  2. Trop d'allocations sont effectuées, de sorte que même libérée, la mémoire est trop fragmentée.

Votre cas semble mieux correspondre au second cas, mais vos options pour une solution ici sont assez limitées.

Une version 64 bits de Visual Studio résoudrait le problème en élargissant l'espace d'adressage, mais cela ne figure pas dans la feuille de route de Visual Studio .

Votre autre option consiste à réduire au maximum l'allocation de mémoire. Vous pouvez réduire le nombre de modules complémentaires de Visual Studio ou essayer de diviser cette énorme solution de VS en solutions plus petites. Vous pouvez également fermer et redémarrer Visual Studio, étant donné que certaines allocations de mémoire sont effectuées en parallèle par les threads Visual Studio. Un élément aléatoire est donc impliqué.

harrymc
la source
Malheureusement, j'ai la dernière version. J'ai téléchargé tous les nouveaux VS il y a environ un mois, et même après une mise à jour, cela n'a pas aidé. Certains collaborateurs ont le même problème.
Kubwosz
J'ai ajouté à ma réponse.
harrymc le