3 votes

Dessiner une courbe sinusoïdale dans la vue Mémoire utilisée du Gestionnaire des tâches sous Windows 10 ?

J'essaie d'écrire une simple preuve de concept script sur Windows 10 qui me permet de dessiner l'absolu d'une courbe de sinus dans la fenêtre de mémoire du gestionnaire de tâches.

Mon code est le suivant :

import time
import math
import gc
import sys

x = 1
string_drawer = []

while True:

    #Formula for the eqaution (sin curve)
    y = (abs(math.sin(math.radians(100*x))))*512000000
    print (y, type(y))

    #Making y type 'int' so that it can be used to append
    y = int(round(y))
    print (y, type(y))

    #Checking the size of string_drawer for debugging
    print(sys.getsizeof(string_drawer))

    #Loop used for appending
    if sys.getsizeof(string_drawer) < y: #If y is bigger, find the difference and append
        y = y - sys.getsizeof(string_drawer)
        string_drawer.append(' ' *y)
    elif sys.getsizeof(string_drawer) > y: #If y is smaller, delete the variable and make a new one
        string_drawer = [] *y
    else: #If y is the same size as string_drawer, do nothing
        string_drawer = string_drawer

    #Call the Python gerbage colector
    gc.collect()

    #Sleep to make sure Task Manager catches the change in RAM usage
    time.sleep(0.5)

    #Increment x
    x += 1
    print(x, type(x))

Ce que j'obtiens est le suivant : Image

Ce que je veux, c'est ça : Image 2

Avez-vous une idée de ce que je fais de mal ? Je pense que c'est quelque chose dans la boucle if ou quelque chose concernant le garbage collector.

Toute aide est appréciée. Merci :)

1voto

Kronen Points 18
sys.getsizeof(string_drawer)

Renvoie la taille d'un objet en octets. L'objet peut être n'importe quel type d'objet objet. Tous les objets intégrés retourneront des résultats corrects, mais ceci mais cela ne doit pas nécessairement être le cas pour les extensions tierces, car il s'agit d'une implémentation de l'application. spécifiques à l'implémentation.

Seule la consommation de mémoire directement attribuée à l'objet est comptabilisée, et non la consommation de mémoire des objets auxquels il fait référence.

Et comme vous ajoutez à une liste de chaînes de caractères, getsizeof renverra la mémoire attribuée à la liste et non la taille des chaînes d'espaces auxquelles elle se réfère. Modifier la liste pour une chaîne de caractères

string_drawer = ''
string_drawer += ' ' * y

mais vous pouvez et devez utiliser len au lieu de sys.getsizeof parce que la dernière ajoute la taille du ramasseur d'ordures (bien que si la chaîne est assez grande c'est négligeable), aussi si vous voulez ne rien faire alors ne faites rien, enlevez les lignes :

else: #If y is the same size as string_drawer, do nothing
    string_drawer = string_drawer

et pour réinitialiser la chaîne, faites string_drawer = '' pas comme vous le faites avec la liste string_drawer = [] * y

Mise à jour : Depuis Python 3.6.2 sys.getsizeof a été modifié pour tenir compte également de la taille des objets référencés.

bpo-12414 : sys.getsizeof() sur un objet code renvoie maintenant les tailles qui incluent la structure du code et les tailles des objets qu'elle référence. Correctif par Dong-hee Na.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X