L’utilisation de la directive PageParserPath peut entraîner des problèmes de performances

Prenons l’exemple du scénario suivant :

  • Vous avez une application web dans l’environnement SharePoint 2010 ou SharePoint 2013 dans laquelle vous avez activé le code côté serveur en ligne à l’aide de la directive PageParserPath dans le fichier web.config.

  • Vous modifiez plus de 15 pages aspx dans les dossiers spécifiés dans l’attribut « VirtualPath » des directives PageParserPath.

Dans ce scénario, le traitement des demandes suivantes prendra plus de temps.

Lorsque la directive PageParserPath est utilisée en combinaison avec compilationMode="Always » AllowServerSideScript="true » IncludeSubFolders="true » valeurs de propriété, chaque page dans les dossiers spécifiés dans l’attribut VirtualPath est compilée dans « C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\root en tant que fichier " App_Web_GUID.dll. Une fois que vous modifiez la page aspx dans SharePoint, la date de dernière modification du fichier change et ASP.NET recompile la page. ASP.NET redémarrer le domaine d’application après 15 recompilations, ce qui décharge toutes les DLL de la mémoire, exécute le collecte de la mémoire et libère toutes les ressources mises en cache. La demande suivante initialise un nouveau domaine d’application pour le site web et commence à compiler des pages et à retupupler les caches. Par conséquent, la demande prendra plus de temps.

Le déploiement de contenu ou toute autre modification par programme de pages aspx stockées dans la base de données de contenu peut également provoquer des modifications à l’heure de la dernière modification et éventuellement un redémarrage du domaine d’application en raison de la limite de recompilation atteinte.

Exemples de valeurs de directive PageParserPath, ce qui peut provoquer ce comportement.

<SafeMode MaxControls="200" CallStack="false" DirectFileDependencies="10" TotalFileDependencies="50" AllowPageLevelTrace="false">
      <PageParserPaths>
 <PageParserPath VirtualPath="/_catalogs/masterpage/*" CompilationMode="Always" AllowServerSideScript="true" IncludeSubFolders="true"/>
 <PageParserPath VirtualPath="/pages/*" CompilationMode="Always" AllowServerSideScript="true" IncludeSubFolders="true"/>
 <PageParserPath VirtualPath="/*" CompilationMode="Always" AllowServerSideScript="true" IncludeSubFolders="true"/>
      </PageParserPaths>
    </SafeMode>

Surveillance

Vous pouvez activer la journalisation des événements dans les serveurs web Application Eventlog à l’aide ASP.NET’infrastructure d’analyse d’état. Modifiez le web.config du site où la directive PageParserPath est utilisée. Recherchez la

system.web et ajoutez les lignes suivantes :

<healthMonitoring>
   <rules>
   <add name="Application Events"
       eventName="Application Lifetime Events"
       provider="EventLogProvider"
       profile="Default"
       minInterval="00:01:00" />
   </rules>
</healthMonitoring>

Une fois que vous avez modifié une page, qui se trouve dans un dossier spécifié dans l’attribut VirtualPath et que sa date de modification change, vous verrez un événement semblable à celui-ci dans le journal des événements de l’application :

Code d’événement : 1003 Message d’événement : la compilation de l’application démarre. Heure de l’événement : [Date et heure] Heure de l’événement (UTC) : [Date et heure] ID d’événement : 6e48fceea1194fcb9f3ff05a4eec3d68 Séquence d’événements : 67 Occurrence d’événement : 3 Code détaillé de l’événement : 0

Une fois que la valeur de l’occurrence d’événement est supérieure à 15, vous verrez l’événement suivant :

Code d’événement : 1001 Message d’événement : l’application démarre. Heure de l’événement : [Date et heure] Heure de l’événement (UTC) : [Date et heure] ID d’événement : 304b82ca4b764de79d42223fcbd2ac49 Séquence d’événements : 1 Occurrence d’événement : 1 Code de détail de l’événement : 0

Cela indique que le pool d’applications a été redémarré.

Solution à court terme

En tant que solution à court terme, il est possible d’augmenter la limite de recompilation de 15 par défaut pour le moteur ASP.NET pendant qu’une solution à long terme est implémentée.

Pour augmenter la recompilation, limitez la valeur numRecompilesBeforeAppRestart à ajouter ou modifier dans l’élément de compilation, par exemple :

<compilation debug="false" numRecompilesBeforeAppRestart="50" />

Pour plus d’informations, voir Compilation Element (ASP.NET Settings Schema).

Solution à long terme

Déplacez les scripts en ligne côté serveur des pages, des mises en page et des pages maîtres dans les contrôles serveur. Déployez ces contrôles à l’aide de solutions et de fonctionnalités et supprimez la directive PageParserPath.

Informations supplémentaires

Encore besoin d’aide ? Go to SharePoint Community.