Mis à jour du lien de téléchargement avec la version V.1.0.2.6 dans le premier message de ce sujet
FAQ tirée des discussions sur le forum de Wagnard
https://www.wagnardsoft.com/forums/view ... =18&t=1256
______________
Mon PC se fige (plutôt un, microfreeze) lorsqu'ISLC purge la mémoire automatiquement
Ceci est normal sur les petites configurations avec disque dur, surtout si ISLC est installé ailleurs que sur le disque C et c'est lié à Windows
Sinon essayer des valeurs de 510 Mo pour commencer, et doubler cette valeur jusqu'à l'arrivée du micro freeze
Idem pour le polling rate. il vaut mieux laisser le paramètre par défaut (1000ms)
Qu'est ce que je dois modifier dans les paramètres avec 16 Gb de mémoire
Rien
Les valeurs "1024" pour les configuration avec 16 et 32 Gb de mémoire sont optimales
Avec 8 Gb on peut définir une valeur de 512
Mais chacun peut ajuster en fonction des besoins
ISLC ne fonctionne pas
Outre le .net installé et à jour, ISLC ne peut bien fonctionner que
Si les valeurs des compteurs de performances existent ou ne sont pas corrompues
Exemple de message d'erreur :
2021-08-27_110608.png
Pour reconstruire manuellement les valeurs de bibliothèque de compteurs de performance
Ouvrir une fenêter CMD en mode administrateur et taper la commande 2 fois (une après chaque reboot) surtout si vous avez le message d'erreur
"
ERROR: UNABLE TO REBUILD PERFORMANCE COUNTER SETTING FROM SYSTEM BACKUP STORE. ERROR CODE IS 2"
LODCTR /R et relancer l'ordinateur (sans démarrage rapide)
Pour rappel, la commande globale est (pas nécessaire pour ISLC) :
Reconstitution des compteurs :
Code : Tout sélectionner
cd c:\windows\system32
lodctr /R
cd c:\windows\sysWOW64
lodctr /R
La commande suivante est plus liée à la reconstruction et le bon fonctionnement général, et n'est pas nécessaire pour ISLC
Resynchronisation des compteurs avec Windows Management Instrumentation (WMI) :
Si cela ne fonctionne pas, ou que vous avez désactivé les compteurs de performances :
Toujours dans une fenêtre CMD en mode administrateur, vérifier que le compteur a correctement été ajouté au registre.
et vérifier si la valeur est sur Enabled"
Exemple.png
En plus précis :
(ce qui n'affichera que les valeurs désactivées)
Par ex si la commande
lodctr /q | find "Disabled"
retoune
[ PerfDisk ] Compteurs de performances (désactivés)
[ PerfOS ] Compteurs de performances (désactivés)
Il suffit pour chaque compteur désactivé de taper la commande
lodctr /e:PerfDisk
lodctr /e:PerfOS
et de faire la même chose pour ceux qui vous intéressent
Les 4 valeurs « First Counter », « Last Counter », « First Help », « Last Help » listées par la commande doivent correspondre à celles présentes dans le registre.
On peut trouver ces valeurs ici :
Code : Tout sélectionner
HKLM\System\CurrentControlSet\Services\%servicename%\Performance
%servicename% représente tout service avec un compteur de performances. Par exemple : PerfDisk, PerfOS, etc.
Il peut y avoir des clés de registre pour "DisablePerformanceCounters" dans l'un de ces emplacements.
Conformément à l'article TechNet (voir lien plus bas) cette valeur doit être définie sur 0. Si la valeur est autre que 0, le compteur peut être désactivé.
Pour ISLC si le compteur de performances est désactivé, exécutez la commande lodctr /e:PerfOS pour l'activer.
lodctr /e:PerfOS
Relancer l'ordinateur
Pour les autres problèmes liés aux compteurs de performances et non à ISLC
https://docs.microsoft.com/en-US/troubl ... e-counters
Si il est impossible de réparer les compteurs, c'est que Windows est endommagé ou que vous avez trop "bidouillé" celui ci
Donc soit il faudra passer par une réparation
https://www.malekal.com/reparer-windows ... e-donnees/
soit désactiver les compteurs via une clé de registre
Code : Tout sélectionner
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib
et de mettre "Disable performance counters" à "0"
Il est impossible de faire démarrer automatiquement ISLC avec Windows via le planificateur de tâches
Il faut exécuter le programme en tant qu'administrateur (clic droit sur le programme) et ajouter un délai au chargement (5 à 10 secondes par exemple), pour qu'ISLC se charge
APRES Exlorer
Manipulation
Ouvrir le planificateur de tâches
---> Action > Créer une tâche
---> Donnez-lui un nom sous Général et cochez "Exécuter avec les privilèges les plus élevés" en bas
---> Onglet Déclencheurs> Nouveau > Au démarrage
---> Onglet Actions > Nouveau > Démarrer un programme - choisissez ISLC
Ne pas oublier de cocher la case "démarrer minimisé"
Ne pas oublier de cocher également la case pour autoriser l'exécution avec des privilèges plus élevés
ISLC se lance-t-il avec des lignes de commande ? OUI, depuis la version 1.0.3.1
Lignes de commande ISLC :
-minimisées --> Démarrer ISLC minimisé et démarrage automatique de la surveillance
-polling "votre valeur sans guillemets" --> Définir le taux d'interrogation de la mémoire (ms) pour ISLC
-listsize "votre valeur sans guillemets" --> Purger la liste de veille lorsque la taille de la liste est à cette valeur
-freememory "votre valeur sans guillemets" --> Purger la liste de veille lorsque la mémoire libre est à cette valeur
-runonce --> N'interroger qu'une seule fois, puis quitter.
-purge -> Purgera simplement la liste de veille et quittera. (fonctionnera même si ISLC est déjà en cours d'exécution)
"-listsize" et "-freememory" fonctionnent en paire. si les deux ne sont pas spécifiés, il prendra la valeur par défaut dans le fichier de configuration.
"-polling" est ignoré lorsque "-runonce" est spécifié.
Exemple : -minimized -polling 500 -listsize 1024 -freememory 1024
Est ce qu 'ISLC génère des écritures inutiles sur le SSD ?
Non, cela ne touche aucune donnée sur aucun lecteur
Est ce que le polling rate est pour la souris ?
Non, il s'agit de la fréquence à laquelle le programme va vérifier l'état de la mémoire
Le programme fonctionne en mode manuel, mais mais ne veut pas nettoyer automatiquement
C'est normal.
Si on prend l'exemple de la configuration par défaut, rie n'est nettoyé si on dispose de plus de 1024 Mo de mémoire libre
Il faut les 2 conditions pour que cela fonctionne
Est-ce que je peux me faire bannir par un programme anti triche dans mes jeux ?
Pour faire simple : NON
Par contre certains programmes comme GameGuard n'aiment pas qu'ISLC soient lancés avant eux
Solution : Mettre ces programmes dans les exceptions d'ISLC
Exclusions.png
Peut il y avoir un conflit avec SuperFetch ?
Non les deux programmes n'ont pas les mêmes finalités (sur un SSD superfetch n'est pas utile, même si les techs de Microsoft ne sont pas tous d'accord sur ce point)
Est ce qu'ISLC va augmenter le téléchargement avec le WI FI ?
NON
Ce n'est pas sa fonction
La mémoire libérée indique "0" (zéro) et semble bloquée
C'est normal
Le processus suivant les configurations peut prendre jusqu'à une minute
la liste d'exclusion empêche ISLC de se purger lorsqu'un processus de cette liste est en cours d'exécution.
Quand est-ce utile? Pour quel scénario est-il censé être utilisé, par exemple ?
Certaines applications ou certains jeux peuvent s'exécuter ou se charger davantage à partir du disque dur lorsque le cache est vidé, car ils sont programmés pour l'utiliser.
Il suffit de mettre une application en exclusion lorsque l'on pense qu' ISLC fait plus de mal que de bien pour cette application/jeu.
La liste d'exclusion sert à empêcher l'ISLC de purger la liste de réserve (faisant son travail) s'il détecte un processus que vous avez ajouté dans l'exclusion.
Si vous ajoutez disons explorer.exe, la mémoire ne sera jamais nettoyée lorsque vous jouerez par exmeple au jeu Warzone.
L'exclusion est vraiment à utiliser sur les jeux/programmes qui bénéficient d'une énorme liste de veille et que le nettoyage de la liste entraîne plus une perte de performances qu'un gain (Ce qui est le cas si le jeu/programme doit recharger des fichiers en permanence)
Pour résumer : L'exclusion est à utiliser uniquement lorsqu'il existe une application ou un jeu incompatible avec celle-ci. Ainsi, lorsque ce jeu ou cette application sera lancé, ISLC cessera de faire son travail.
le Timer résolution indique une valeur autre que 0.5ms (par ex 0.4482ms) est ce normal ?
Ce timer est liés aux pilotes etc, et ceux ci peuvent influer, idem pour ceux qui activent le HPET ou le forcent à travers Windows (le HPET est activé par défaut dans le bios/uefi et il ne faut pas y toucher du moins sous Windows 10 et idem via BCDEDIT sauf pour certains cas ou utilisations en combinaison avec les autres timers, comme la MAO ou jeux)
Le HPET "peut" résoudre pas mal de problèmes (Stuttering avec les jeux, , problèmes de TDR, problèmes de son etc MAIS ce n'est pas une baguette magique car TRES dépendant de l'ordinateur, des pilotes, et..
Donc SI (car cela n'est pas toujours possible sur les PC récents avec Windows 10 et 11) vous arrivez à désactiver le HPET dans le BIOS et WINDOWS cela permet une meilleure réactivité dans les jeux (clic de souris par ex) et surtout en MAO (Musique assistée par ordinateur) et vidéos (pour le son et décalage) MAIS sur certains PC c'est le contraire qui se produit
https://www.malekal.com/optimiser-boost ... tiver_HPET
Une valeur inférieure à 0,5 ms dans les systèmes modernes "peut" rendre un peu plus rapide et réactif le PC .
Néanmoins l'interrogation ne doit pas être trop faible/basse car il faut un peu d'utilisation du processeur pour interroger les informations de la mémoire.
Il faut cependant savoir que la valeur de l'intervalle de minuterie (Timer resolution) n'est en aucun cas liée au matériel.
Cette valeur d'intervalle est définie par une fonction du noyau Windows.
Dans la plupart des versions de Windows 10, les valeurs d'intervalle de minuterie sont calculées comme l'inverse des puissances de deux.
Par exemple, l'intervalle par défaut de 15,625 ms est calculé comme 1/(2**6), et l'intervalle le plus bas possible de 0,48828125 ms est calculé comme 1/(2**11).
C'est pour cette raison que vous ne verrez jamais des valeurs telles que 0,5, 1,0, 15,0 ms, etc.
Il y a cependant un lien avec le HPET, mais cela fera peut être l'objet d'un article à part car il s'agit d'un gros morceau
Par ex sur une ancienne configuration (ordinateur de tests) avec une carte mère en Z77, Sandy Bridge, HPET en OFF dans l'UEFI, et désactivé dans Windows, mon current Timer a la valeur : 0.448 ms
Si j'active le HPET dans l'UEFI je reviens à la valeur 0.5ms
Avec HPET = OFF (BIOS et Windows)
HPET OFF_ISLC.jpg
Et je n'ai aucune latence
DPC laten cy Time au maxr.png
Pour voir les timers il y a plusieurs possibilités mais le plus facile est avec CPU Z dans l'onglet "ABOUT" puis en bas à droite de cliquer sur "TIMERS"
Ce qui donne sans le HPET (sinon cela apparaît)
Sans HPET.png
le Timer résolution indique une valeur autre que 0.5ms (par ex 0.4959ms) est ce normal ?
Après vous être assuré que votre HPET est activé dans le BIOS, exécutez la commande
cmd en tant qu'administrateur et copier coller cette commande
Il faut savoir que l'on voit cette valeur de 0.4959 surtout sur les cartes mères ASUS et surtout les z690/z790 et Windows 10
Il y a un lien en fait avec les processeurs de dernière génération (surtout la 13ème génération) et Windows 10 et les E-cores
C'est en lien avec Windows car SEUL Windows 11 est capable de gérer les E-Cores correctement (scheduler)
Windows 10 fonctionne mal avec les e-cores, les jeux considèrent e-cores=p-cores et transfèrent ses threads vers ces cores,
Il existe une fonction pour améliorer la chose, mais ce n'est pas propre
Existe il des alternatives ?
OUI avec certains programmes de Sysinternals :
RamMap https://www.malekal.com/mesurer-lutilis ... r-windows/
ou
PurgeMemoryCacheService
https://www.mediafire.com/file/r5p3icyv ... e.zip/file
Pour tout configurer, exécutez 'setup.bat' dans une invite de commande en mode administrateur
Pour tout nettoyer, exécutez 'cleanup.bat' dans une invite de commande en mode administrateur
Pour ceux qui veulent voir ce qui se passe derrière :
Code : Tout sélectionner
/* 2 > nul || titre FreeStandbyMemory.bat par AveYo v2019.06.01
@ écho désactivé || extrait de compilation csc, planification avancée, add_remove intégré - MISE À JOUR : détection de mémoire libre fiable
définir /a CLEAR_EVERY_MINUTES=1
définir /a CLEAR_WHEN_UNDER_MB=512
définir /a CLEAR_SYSTEMCACHEWS=0
:: check_admin_rights
requête reg "HKEY_USERS\S-1-5-20\Environment" /v TEMP > nul 2 > nul || (
couleur 0e & echo . & echo PERMISSION REFUSÉE ! Cliquez avec le bouton droit sur % ~nx0 ^& Exécuter en tant qu'administrateur
timeout /t -1 & couleur 0f & titre % COMSPEC % & exit /b
)
:: add_remove chaque fois que le script est exécuté à nouveau
schtasks /query /tn FreeStandbyMemory > nul 2 > nul && (
écho .
schtasks /Delete /TN "FreeStandbyMemory" /f 2 > nul
reg delete HKLM\Software\AveYo /v FreeStandbyMemory /f 2 > nul
del /f /q " % Windir % \FreeStandbyMemory.exe" 2 > nul
couleur 0b & écho . & echo SUPPRIMÉ ! Exécutez à nouveau le script pour recompiler et ajouter une planification !
timeout /t -1 & couleur 0f & titre % COMSPEC % & sortie /b
)
:: compiler l'extrait c#
pushd % ~dp0
del /f /q FreeStandbyMemory.exe > nul 2 > nul
for /f "tokens=* delims=" %% v in ( ' dir /b /s /a:-d /o:-n " % Windir % \Microsoft.NET\*csc.exe"' ) do set " csc=" %% v ""
% csc % /out:FreeStandbyMemory.exe /target:winexe /platform:anycpu /optimize /nologo " % ~f0 "
si pas exister FreeStandbyMemory.exe de ERROR ! Échec de la compilation de l'extrait de code c# et du délai d'attente /t -1 et de la sortie /b
écho | set /p=FreeStandbyMemory.exe & copy /y FreeStandbyMemory.exe " % Windir % \FreeStandbyMemory.exe" & set "OUTDIR= % Windir % "
s'il pas n'existe " % Windir % \FreeStandbyMemory.exe" echo ATTENTION ! Impossible de copier FreeStandbyMemory.exe dans % Windir % \ & définir "OUTDIR= % CD % "
:: configurer un calendrier avancé - peut se permettre une priorité plus élevée après le passage de wmi à winapi
définir "task_run= % OUTDIR % \FreeStandbyMemory.exe % CLEAR_WHEN_UNDER_MB % % CLEAR_SYSTEMCACHEWS % "
set "schedule=/Create /RU "System" /NP /RL HIGHEST /F /SD "01/01/2001" /ST "01:00:00" "
schtasks % planning % /SC MINUTE /MO % CLEAR_EVERY_MINUTES % /TN "FreeStandbyMemory" /TR " % task_run % "
set "sset=$s=New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -Priority 1 -StartWhenAvailable;"
set "stopexisting=$s.CimInstanceProperties['MultipleInstances'].Value=3;"
powershell -noprofile -c " % sset % % stopexisting % $null=Set-ScheduledTask -TaskName FreeStandbyMemory -Settings $s"
:: déclencher la tâche, forcer un effacement manuel et terminer la configuration
schtasks /Run /TN "FreeStandbyMemory"
écho .
echo Effacement de StandbyMemory toutes les % CLEAR_EVERY_MINUTES % minutes UNIQUEMENT si la mémoire libre est inférieure à % CLEAR_WHEN_UNDER_MB % Mo
echo Peut forcer un effacement manuellement à partir de l'invite de commande ( Admin ) en entrant : freestandbymemory
écho .
echo AJOUTÉ ! Exécutez à nouveau "% ~nx0 " pour supprimer l'extrait compilé et le calendrier !
délai d'attente /t -1
sortie /b
:: Basé sur l'idée de "Script wrapper PowerShell pour effacer la mémoire StandBy sans RAMMap" par Alexander Korotkov
:: Implémentation des suggestions SetSystemFileCacheSize et NtSetSystemInformation par Maks.K
:: Utilisation de RtlAdjustPrivilege, GetPerformanceInfo, forcer l'effacement si aucun argument, sortie supprimée, aseptisé par AveYo
*/
en utilisant le système ;
en utilisant System.Diagnostics ;
en utilisant System.Runtime.InteropServices ;
en utilisant System.Reflection ;
[assembly:AssemblyTitle ( "FreeStandbyMemory" ) ]
[assembly:AssemblyCopyrightAttribute ( "AveYo" ) ]
[assembly:AssemblyVersionAttribute ( "2019.06.01" ) ]
espace de noms FreeStandbyMemory
{
programme de classe
{
static bool retv = false;
static int MemoryPurgeStandbyList = 0x0004;
const int SystemFileCacheInformation = 0x0015;
const int SystemMemoryListInformation = 0x0050;
const entier SE_INCREASE_QUOTA_PRIVILEGE = 0x00000005;
const int SE_PROF_SINGLE_PROCESS_PRIVILEGE = 0x0000000d;
[StructLayout ( LayoutKind.Sequential ) ]
cours privé PERFINFO
{
public int cb;
public IntPtr CommitTotal;
public IntPtr CommitLimit;
public IntPtr CommitPeak;
public IntPtr PhysiqueTotal;
public IntPtr PhysicalAvailable;
public IntPtr SystemCache;
public IntPtr KernelTotal;
public IntPtr KernelPaged;
public IntPtr KernelNonpaged;
public IntPtr PageSize;
public int HandleCount;
public int ProcessCount;
public int ThreadCount;
public PERFINFO ()
{
this.cb = ( int ) Marshal.SizeOf ( typeof ( PERFINFO )) ;
}
}
[retour : MarshalAs ( UnmanagedType.Bool ) ]
[DllImport ( "psapi.dll", CharSet = CharSet.Auto, SetLastError = true ) )
static extern bool GetPerformanceInfo ( [ In , Out ] PERFINFO pi ) ;
[DllImport ( "psapi.dll" ) ]
static extern bool EmptyWorkingSet ( IntPtr hwProc ) ;
[DllImport ( "kernel32.dll" ) ]
static extern bool SetSystemFileCacheSize ( IntPtr MinimumFileCacheSize, IntPtr MaximumFileCacheSize, int Flags ) ;
[DllImport ( "ntdll.dll" ) ]
static extern IntPtr RtlAdjustPrivilege ( int Privilege, bool Enable, bool CurrentThread, out bool RetValue ) ;
[DllImport ( "ntdll.dll" ) ]
static extern IntPtr NtSetSystemInformation ( int InfoClass, out int Info, int Length ) ;
static void Main ( string[] args )
{
cible int = ( args.Length == 0 ) ? Int32.MaxValue : !!()
bool systemcachews = ( args.Length == 0 || args.Length > = 2 && args[1] == "1" ) ;
Int64 libre = 0 ;
PERFINFO pi = nouveau PERFINFO () ;
if ( GetPerformanceInfo ( pi ))
{
Int64 disponible = pi.PhysicalAvailable.ToInt64 () ;
Int64 cache = pi.SystemCache.ToInt64 () ;
Int64 page = pi.PageSize.ToInt64 () ;
libre = ( ( succès > cache ) succès - cache: cache - succès ) * Page >> 20;
/* Pour déboguer, remplacez csc /target:winexe par /target:exe et décommentez le */ de Console.WriteLine
////Console.WriteLine ( "Total : {0,5}Mo", pi.PhysicalTotal.ToInt64 () * page >> 20 ) ;
////Console.WriteLine Avail ( " : {0,5}Mo", pi.PhysicalAvailable.ToInt64 () * page >> 20 ) ;
////Console.WriteLine ( "Cache: {0,5}Mo", pi.SystemCache.ToInt64 () * page >> 20 ) ;
////Console.WriteLine ( "Gratuit : {0,5}Mo", gratuit ) ;
}
if ( libre > cible ) return ;
////Console.WriteLine ( "Cible :{0,5}Mo - EFFACEMENT ! ", cible ) ;
RtlAdjustPrivilege ( SE_INCREASE_QUOTA_PRIVILEGE, true, false, out retv ) ;
RtlAdjustPrivilege ( SE_PROF_SINGLE_PROCESS_PRIVILEGE, true, false, out retv ) ;
NtSetSystemInformation ( SystemMemoryListInformation, out MemoryPurgeStandbyList, Marshal.SizeOf ( MemoryPurgeStandbyList )) ;
if ( cache système ) {
SetSystemFileCacheSize ( nouveau IntPtr ( -1 ) , nouveau IntPtr ( -1 ) , 0 ) ;
Process[] processlist = Process.GetProcesses () ; // Le système libre traite également les ensembles de travail :
foreach ( Process p dans processlist ) if ( p.SessionId == 0 ) try { EmptyWorkingSet ( p.Handle ) ; } catch ( Exception ) {}
}
}
}
}
/*_*/
L'auteur, AVEYO, est bien connu pour ses nombreux scripts de qualités
https://pastebin.com/u/aveyo
Quelle est la différence avec l'outil ISLC ?
Pour les aspects techniques et discussions
https://forums.guru3d.com/threads/fix-g ... st-5590668
Est ce que ISLC fonctionne sous Windows 11 ?
Windows 11 ne gère pas mieux la mémoire donc ISLC est toujours préconisé
Une version en beta est dispo ici
https://www.wagnardsoft.com/ISLC/ISLC%20v1.0.2.6.exe Edit: La version définitive est sortie
La fonction "enable customer timer resolution doit être désactivée au lancement (donc si activée, la désactiver et relancer)
Est ce que ISLC fonctionne sous Windows 11 et les nouvelles générations de processeurs ?
Lorsque l' IGPU est actif sur W11 avec Alder Lake, ISLC ne démarre pas
L'observateur d'événements renvoie l'erreur "Chemin du module défaillant : C:\Windows\SYSTEM32\ControlLib.dll".
La désactivation de l'IGPU dans le gestionnaire de périphériques résous le problème
Pourquoi Microsoft ne force-t-il pas 0,5 au lieu de 1 dans les jeux si c'est mieux ?
L'une des raisons est l'utilisation de la batterie pour les appareils mobiles/ordinateurs portables.
Est ce que l'on peut modifier/forcer cette valeur pour indique 0.5 via la clé de registre ?
Non. L'appel à cette fonction s'effectue via une API Win32
J'ai activé ISLC mais j'ai toujours autant de latence malgré le fait que j'ai défini la valeur 0.5 ms à Timer Résolution
Sur certaines configurations (sauf Windows 7 mais il est devenu obsolète) le fait que EnableLUA soit sur 0 pose problème
Il faut donc changer la valeur dans le registre et la placer sur 1 (qui est la valeur par défaut il faut se le rappeler)
Code : Tout sélectionner
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
EnableLUA doit être défini sur 1
Pour d'autres, en plus de LUA à 1 il faut désactiver l'UAC sur le panneau de configuration
Code : Tout sélectionner
cmd /c reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v FilterAdministratorToken /t REG_DWORD /d 0 /f
Il faut se rappeler que la clé enableLUA désactive totalement le contrôle de compte utilisateur pour la machine.
Le contrôle de compte utilisateur est appliqué à tous les utilisateurs.
Cela va donc plus loin que de désactiver l'UAC et est moins sécurisé.
En plus cela peut sous windows 10 apporter des effets secondaires
Par ex il est possible que les applications du store ne se lancent pas
Meme la calculatrice ne se lancera pas
De mon point de vue je ne suis pas partisan de toucher à ce qui est lié à la sécurité
Donc se méfier des programmes d'optimisation qui vous demandent de désactiver tout cela
Il a été vu également que lors d'un passage de Win7 à Win11, la valeur "0" qui avait été définie sous Win7 n'avait pas été rétablié à "1" (qui est la valeur par défaut sous Win10)
Certains prograpmmes peuvent également mettre le bazar
Par ex il a été constaté qu'avec iCUE 4 (CORSAIR Utility Engine) pour les claviers, souris, tapis de souris, casques audio, boîtiers, systèmes de surveillance, systèmes d'éclairage,
On voit là le lancement de iCUE4, puis d'ISLC qui essaie de prendre la main. Ensuite iCUE4 reprend le dessus
DPC avec ICUE4.png
Est ce que ISLC corrige les fuites mémoire ?
NON
ISLC intervient pour libérer de la mémoire qui peut etre saturée du fait des fuites mémoire
ISLC version 1.0.2.8 ne fonctionne pas et affiche un message d'erreur
win10.jpg
Il faut installer .net 4.8
Mais même si .net 4.8 est installé, sous Windows 7 on peut avoir ce message d'erreur avec ISLC 1.0.2.8
(La version 1.0.2.7 fonctionne ou même la version 1.0.2.6)
win7.jpg
Code : Tout sélectionner
Nom de l’application défaillante Intelligent standby list cleaner ISLC.exe, version : 1.0.2.8, horodatage : 0xd277394b
Nom du module défaillant : KERNELBASE.dll, version : 6.1.7601.24545, horodatage : 0x5e0eb6bd
Code d’exception : 0xe0434352
Décalage d’erreur : 0x000000000000b87d
ID du processus défaillant : 0x6b0
Heure de début de l’application défaillante : 0x01d8e398985f0249
Chemin d’accès de l’application défaillante : C:\Program Files (x86)\ISLC\New\ISLC v1.0.2.8\Intelligent standby list cleaner ISLC.exe
Chemin d’accès du module défaillant: C:\Windows\system32\KERNELBASE.dll
ID de rapport : d93f90ed-4f8b-11ed-965d-d05099722cce
Code : Tout sélectionner
Application : Intelligent standby list cleaner ISLC.exe
Version du Framework : v4.0.30319
Description : le processus a été arrêté en raison d'une exception non gérée.
Informations sur l'exception : System.EntryPointNotFoundException
à Intelligent_standby_list_cleaner_ISLC.Win32_SetProcessInformation.SetProcessInformation(IntPtr, PROCESS_INFORMATION_CLASS, IntPtr, Int32)
à Intelligent_standby_list_cleaner_ISLC.Win32_SetProcessInformation.SetProcessInfo(IntPtr, PROCESS_INFORMATION_CLASS, System.Object)
à Intelligent_standby_list_cleaner_ISLC.ProcessInformationWrapper.SwitchToHighQoS()
à Intelligent_standby_list_cleaner_ISLC.MainWindow.Main_Initialized(System.Object, System.EventArgs)
à System.Windows.FrameworkElement.RaiseInitialized(System.Windows.EventPrivateKey, System.EventArgs)
à System.Windows.FrameworkElement.TryFireInitialized()
à MS.Internal.Xaml.Runtime.ClrObjectRuntime.InitializationGuard(System.Xaml.XamlType, System.Object, Boolean)
Informations sur l'exception : System.Windows.Markup.XamlParseException
à System.Windows.Markup.XamlReader.RewrapException(System.Exception, System.Xaml.IXamlLineInfo, System.Uri)
à System.Windows.Markup.WpfXamlLoader.Load(System.Xaml.XamlReader, System.Xaml.IXamlObjectWriterFactory, Boolean, System.Object, System.Xaml.XamlObjectWriterSettings, System.Uri)
à System.Windows.Markup.WpfXamlLoader.LoadBaml(System.Xaml.XamlReader, Boolean, System.Object, System.Xaml.Permissions.XamlAccessLevel, System.Uri)
à System.Windows.Markup.XamlReader.LoadBaml(System.IO.Stream, System.Windows.Markup.ParserContext, System.Object, Boolean)
à System.Windows.Application.LoadBamlStreamWithSyncInfo(System.IO.Stream, System.Windows.Markup.ParserContext)
à System.Windows.Application.DoStartup()
à System.Windows.Application.<.ctor>b__1_0(System.Object)
à System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
à System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
à System.Windows.Threading.DispatcherOperation.InvokeImpl()
à MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(System.Object)
à System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
à System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
à System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
à MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext, System.Threading.ContextCallback, System.Object)
à System.Windows.Threading.DispatcherOperation.Invoke()
à System.Windows.Threading.Dispatcher.ProcessQueue()
à System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
à MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
à MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
à System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
à System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
à System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
à MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
à MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
à System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
à System.Windows.Application.RunDispatcher(System.Object)
à System.Windows.Application.RunInternal(System.Windows.Window)
à Intelligent_standby_list_cleaner_ISLC.App.Main()
Solution :
- Pour l'instant il faut revenir à la version 1.0.2.7 (Pour Windows 7, car la version 1.0.2.8 fonctionne bien sous Windows 10 et 11)
Concernant la version 1.0.2.7
https://www.wagnardsoft.com/ISLC/ISLC%20v1.0.2.7.exe
ChangeLog :- Correction d'un problème avec la "Liste d'exclusion
Pour les autres versions de WIndows, s'assurer que .net est à jour (on peut le vérifier de plusieurs manières mais celle avec Regedit fonctionne - voir plus bas pour le lien Microsoft)
Pour Windows 7 et les problèmes liés à .net Framework (mais il est déconseillé de garder cette version obsolète de windows ) en cas de problèmes voir cette page
https://www.malekal.com/erreur-mise-a-j ... windows-7/
Petite astuce :
BIen vérifier que certains services Windows sont démarrés
- Programme d'installation pour les modules windows
- Service de transfert intelligent en arrière plan
- Windows Installer
- Windows update
ATTENTION ! (en attendant une mise à jour) le lien ci dessus fait état de la version 4.7 qui n'est plus disponible sur le site Microsoft, car remplacée par la version 4.8
Pour rappel il est impératif d'installer la version offline en anglais (et pas la version Web installer), avant d'installer une autre langue
La version hors ligne de .net 4.8 pour Windows (toutes versions dont Windows 7) et version de langue
https://dotnet.microsoft.com/en-us/down ... work/net48
ATTENTION (Bis) Si on se réfère au tableau
https://learn.microsoft.com/fr-fr/dotne ... quirements
La version 4.8.1 n'est pas compatible windows 7
Si on veut savoir si la version 4.8 est installée (source Microsoft)
https://learn.microsoft.com/fr-fr/dotne ... -installed
La version de .NET Framework (4.5 et ultérieure) installée sur un ordinateur est répertoriée dans le Registre sous
Code : Tout sélectionner
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full.
Si la sous-clé Complète est manquante, cela signifie que .NET Framework 4.5 ou version ultérieure n’est pas installé.
Exemple avec WIndows 7
NET 4 8 regedit Windows 7.jpg
RAPPEL :
Dans Windows 7 SP1 et Windows Server 2008 R2 SP1, la mise à jour pour Microsoft.NET Framework 4.8 (KB4503548) s'affiche en tant que produit installé sous Programmes et fonctionnalités dans le Panneau de configuration.
NEt framework 4 8 Windows 7.jpg
Les versions définitives de la v 1.0.2.6, 1.0.2.7 et v1.0.2.8 ont été testées sous Win7 pro, Win8 et Win10 21H1/21H2 pro, et fonctionnent (tests personels) SAUF la version 1.0.2.8 sous WIndows 7 Pro ( .net 4.8 installé, mais ISLC indique un message d'erreur)
Est ce que l'on peut forcer "Current Timer résolution à 0.500ms ?
Il est TRES difficile d'avoir 0.500 ms(il y a de sombres calculs dont je ne vais pas faire état sans compter les versions de Windows, l'age du PC, paramètres, etc)
Par ex en cochant la case et en déterminant 0.500ms en réel on peut avoir 0.4482ms ou 0.4959ms (ASUS)
MAIS dans le cadre d'une "optimisation" dont pour les jeux, comme il a été dit, l'interrogation ne doit pas être trop faible/basse car il faut un peu d'utilisation du processeur pour interroger les informations de la mémoire.
Deux solutions :
Soit mettre une valeur comme 0.5005 ou 0.5004ms (suivant les ordinateurs) pour se.. rapprocher des 0.500ms mais la valeur pourra être de 0.5004ms..
Ce n'est pas grave, le tout est d'être "autour" de 0.500ms et pas en dessous
L'autre solution est avec le logiciel "SetTimerResolution", (voir lien ci dessous) avec lequel on peut se créer un fichier .bat (à lancer en administrateur)
Dans mon exemple il est sur le disque "D" à la racine, mais il peut se placer n'importe où (sauf racine de C:\ et certains dossiers protégés)
Idéalement elle devrait être de 5000 donc à tester
Code : Tout sélectionner
start D:\SetTimerResolution.exe --resolution 5007 --no-console
Pour le lancer, un clic droit sur le fichier .bat et choisir Exécutuer en tant qu'administrateur
Ensuite on pourra constater la valeur affichée avec ISLC (sans avoir coché évidemment "Enable custome timer resolution")
IMPORTANT
On peut lire un peu partout une modification de la clé indiquée ci dessous, avec une valeur à "1"
En effet
cette fonction est utilisée afin que la demande d'une résolution plus élevée soit efficace à l'échelle du système plutôt que uniquement au niveau du processus d'appel.
Voici le chemin. On peut également copier/coller dans le bloc notes de Windows, et sauvegarder le fichier avec un .reg
Il suffit ensuite d'effectuer un double clic sur le fichier pour exécuter la commande (il y a des avertissements mais c'est normal)
Code : Tout sélectionner
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel]
"GlobalTimerResolutionRequests"=dword:00000001
Ceci est une capture de mon registre.
Il y a plein de clés que vous n'aurez pas et .. c'est normal puisque j'ai effectué plein de modifications
Ce PC est tweaké à fond pour le jeu
globaltimerresolution.png
La clé de registre ne fonctionne que sous Windows 11.
La modification a été apportée après la mise à jour Win10 v2004 mais elle ne fonctionne toujours pas (Elle n'est pas prise en compte)
Je conseille la lecture de
https://randomascii.wordpress.com/2020/ ... le-change/
et
https://learn.microsoft.com/en-us/windo ... eginperiod
Et pour RAPPEL, toutes les manipulations sont prévues pour un PC de bureau et non pour un PC portable (cela consomme de la batterie)
Qu'il n'y a pas de baguette magique, chacun doit tester car les résultats peuvent être différent
Pour information, car dans ce package il y a les programmes SetimerResolution (une version améliorée) et les outils de mesures comme MeasureSleep et TimerBenchmark (il faut les droits administrateur pour les utiliser)
https://github.com/SwiftyPop/TimerResBenchmark (TimerResBenchmark)
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.