Bonjour,
J'ai un projet ASP vieux d'au moins 10 ans qui est en train d'être réécrit en MVC.
Il utilise entre autres des ressources externes dont des objets COM accessibles via des services.
Ça tourne comme une horloge depuis des années en ASP sans anicroche (même sous 32bits).
La réécriture en MVC est bien avancée et toutes les fonctionnalités externes à IIS et MVC sont accessibles et opérationnelles, dont ces objets COM.
Sauf que sous MVC on a des Out Of Memory inexplicables, et pourtant les serveurs sont bourrés de mémoire et leurs applications tournent en 64bits (dont IIS et le framework .NET, je suppose et j'espère).
Les Out Of Memory sont reproductibles et on croit savoir où ils ont lieu.
Lors d'un appel COM, une méthode renvoit un BSTR et, parfois mais pas toujours, lorsque ce BSTR contient quelques dizaines de mégas (au delà de 40MB) le Out Of Memory se produit après le return de la méthode et avant de rendre la main à MVC. Le core .NET ne parvient pas à trouver suffisamment de mémoire pour convertir ces quelques malheureux mégas de BSTR en System.String ().
En bref, il reste une bonne dizaine de GB physique de disponible par l'OS mais le core .NET ne les voit/prend pas.
J'ai placé quelques System.GC.Collect(), mais ça ne change rien.
Nous avons des serveurs de test sur lesquelles les deux applications ASP et MVC tournent en même temps. La vieille version ASP ne pose aucun soucis, et les objets COM répondent à toutes les requêtes via des scripts de stresstest. Le problème semble bien se situer du coté de .NET (ou MVC).
Je suis développeur C++, donc un peu perdu avec le GC de .NET que je suppose performant et apte à utiliser tout ce que l'OS et le hardware dispose, comme en C++.
Pour moi, c'est donc incompréhensible qu'une application 64bits tournant sur une machine récente bien pourvue en mémoire ne puisse pas allouer quelques mégas alors qu'une ancienne technologie sous 32bits et vieille de 20 ans (ASP) fonctionne très bien dans des conditions semblables, et fonctionnait même aussi bien sur du hardware plus ancien et moins bien pourvu.
Merci pour votre aide.
Partager