IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C# 2.0] Comment fixer la quantité de mémoire allouée à mon application ?


Sujet :

C#

  1. #1
    Membre chevronné Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut [C# 2.0] Comment fixer la quantité de mémoire allouée à mon application ?
    Bonjour,
    Dans le cadre d'un PVC avec un algo de Sep-Eval j'utilise une fonction reccurente, qui se rappele énormement de fois. Au bout d'un certain temps sur mon algo, j'ai droit à un joli StackOverflow (je ne trouve toujours pas comment augmenter la taille mémoire allouée à mon appli (cf mon precedent post)) mais je m'aperçois que le programme plante systematiquement après 3851 passages dans ma recurrence.
    Est ce qu'il y aurait une limitation à ce niveau ? et que mon prblème de StackOverflow ne serait du qu'a cela ?? (sachant que mon programme utilise un peu plus de 20Mo de ram..)

    Merci pour votre aide à tous

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Salut,

    je crois que la taille maximale de la pile pour un thread .net est de 1Mo et je ne connais pas de moyend de l'augmenter directement depuis le compilateur C# ou VB.
    Regarde du coté de l'utilitaire EditBin.exe avec l'option /stack , il permet de modifier la taille de la pile aprés la compilation...

  3. #3
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 102
    Points
    102
    Par défaut
    N'y a t il pas moyen de dérécursifier la chose ? Repoussée une limite ne t'en affranchit pas, et tu risque bien vite de retomber dessus.

  4. #4
    Membre chevronné Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut
    Je viuens d'essayer de passer à une boucle While et ça semble fonctionner pour le moent.
    Apparement il y a une limitation sur le nombre de boucle recursive...

  5. #5
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Citation Envoyé par Jinroh77
    j'ai droit à un joli StackOverflow (je ne trouve toujours pas comment augmenter la taille mémoire allouée à mon appli (cf mon precedent post)) mais je m'aperçois que le programme plante systematiquement après 3851 passages dans ma recurrence.
    Est ce qu'il y aurait une limitation à ce niveau ? et que mon prblème de StackOverflow ne serait du qu'a cela ?? (sachant que mon programme utilise un peu plus de 20Mo de ram..)
    La taille de la pile n'a rien à voir avec la capacité en RAM.

    Je ne vais pas me lancer dans un cours sur le fonctionnement d'un ordinateur, mais sache que si tu as un StackOverFlow exception, c'est que ton application est pourrie quelque part. (désolé j'ai pas trouvé d'autre mot).

    Bon aller.. très rapidement :
    - Quand tu execute du code y'a un pointeur en mémoire qui parcours le code, instruction par instruction.
    - Quand tu appelles une méthode, ce pointeur doit pouvoir revenir là où il était (à l'endroit où la méthode a été appelée), donc le runtime stocke une adresse de retour (entre autre) sur la pile d'exécution (la stack).
    - Quand tu fais un appel récursif, le runtime va donc empiler une adresse de retour. A chaque récursion il va en empiler une en fait.
    - Si tu as un StackOverFlow exception, ça veut dire que la capacité de cette pile est dépassée, donc dans 99,999% des cas que la condition de sortie de ta récusrion est mauvaise.
    - Si tu fais parti de 0.001% qui ont volontairement fait une récursion hyper profonde, je te suggère te revoir ton code, tu as un pb de conception.

  6. #6
    Membre chevronné Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut
    Merci pour ces petites explications.
    Effectivement j'étais dans le cas d'une fonction recursive qui devait s'auto appeler plusieur centaine de millier de fois, j'ai finalamenet laisssé tombé le recurssif pour passer à une boucle while

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/09/2007, 22h42
  2. Comment fixer les largeurs des colonnes d'un TStrinGrid
    Par marsupilami34 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 24/08/2005, 13h24
  3. Réponses: 2
    Dernier message: 16/08/2005, 09h43
  4. Comment fixer une date dans un champ !
    Par LATHIOS dans le forum Access
    Réponses: 8
    Dernier message: 17/06/2005, 19h44
  5. [MFC]comment fixer attributs de fichiers
    Par lucky dans le forum MFC
    Réponses: 4
    Dernier message: 21/04/2005, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo