begin process at 2012 02 07 08:29:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C#

 > 

Archives

 > 

Divers

 > 

Stack vs Heap


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Stack vs Heap

lundi 4 juillet 2005 à 12:59:16 | Stack vs Heap

Lutinore

Administrateur CodeS-SourceS

Pour ceux que ca intéresse je viens de faire un test.. Il parait qu'avec .NET l'allocation dynamique sur le tas est quasiment aussi rapide que l'allocation sur la pile.. Pas si sûr..


namespace Test
{
    class App
    {
        [ System.Runtime.InteropServices.DllImport( "kernel32.dll" ) ]
        [ System.Security.SuppressUnmanagedCodeSecurity ]
        private static extern int QueryPerformanceCounter( ref long count );

        private static long ticks = 0;

        private static long Ticks
        {
            get
            {
                QueryPerformanceCounter( ref ticks );
                return ticks;
            }
        }

        private unsafe static void Stack( )
        {
            byte* p = stackalloc byte[ 256 ]; // Attention à StackOverflowException.
        }

        private static void Heap( )
        {
            byte[ ] tab = new byte[ 256 ];
        }

        private static void Main( )
        {
            long ticks = 0;
            long stack = 0;
            long heap = 0;

            Stack( ); // JIT
            Heap( ); // JIT

            ticks = Ticks;
            for ( int i = 0; i < 1000; i++ )
                Stack( );
            stack = Ticks - ticks;

            ticks = Ticks;
            for ( int i = 0; i < 1000; i++ )
                Heap( );
            heap = Ticks - ticks;

            System.Windows.Forms.MessageBox.Show( "Stack\t: " + stack + "\nHeap\t: " + heap );
        }
    }
}

lundi 4 juillet 2005 à 14:38:45 | Re : Stack vs Heap

ZogStriP

Membre Club Administrateur CodeS-SourceS
Je viens de tester ton programme et il est vrai que l'allocation sur le tas n'est pas aussi rapide que sur la pile (un facteur d'environ : 60)...

Mais moi j'aimerais savoir où est ce que tu as lu que l'allocation sur le Heap était pratiquement aussi rapide que l'allocation sur la Pile en .Net ??

Je ne m'y connais pas trop, mais je pense qu'en C/C++ c'est la même chose.... non ?

ZogStriP
Mon Blog : IA pour Incomplet de l'Ancéphale
Mon Site
: Site web sur le projet
lundi 4 juillet 2005 à 14:55:30 | Re : Stack vs Heap

MorpionMx

Membre Club Administrateur CodeS-SourceS
Meme reaction que ZogStrip, j'ai jamais lu que l'allocation sur le tas était aussi rapide que celui sur la pile.

Mx
lundi 4 juillet 2005 à 15:00:28 | Re : Stack vs Heap

Lutinore

Administrateur CodeS-SourceS

Salut, bien je ne sais plus ou j'ai lu ca à vrai dire.. On entend aussi parfois dire qu'avec les nouveaux microprocesseurs d'auourd'hui les différences ne sont plus aussi significatives.. En fait le but premier de ce test c'est que je voulais tester la performance du mot clé "stackalloc", non seulement c'est éfficace mais en plus le GC n'a aucun travail à faire à la sortie de la fonction et si je parcours le tableau avec le pointeur retourné je ne subit pas les ralentissement dû au tests "IndexOutOfRange" du "runtime". J'imagine que pour certaines applications ca peut êre utile..

lundi 4 juillet 2005 à 15:38:32 | Re : Stack vs Heap

ZogStriP

Membre Club Administrateur CodeS-SourceS
C'est certainement utile, mais ça voudrais dire que l'on retombe dans des applications C/C++ alors que l'on code en C# et en Managé (et tout le monde sait que Manage => Perte de performances....)

ZogStriP
Mon Blog : IA pour Incomplet de l'Ancéphale
Mon Site
: Site web sur le projet
lundi 4 juillet 2005 à 16:07:35 | Re : Stack vs Heap

Lutinore

Administrateur CodeS-SourceS
Oui mais parfois travailler en unsafe c'est inévitable.. En général j'utilise plutôt Marshal.AllocCoTaskMem.. On peut aussi fixer en mémoire un tableau, mais je crois que c'est pas super performant.. Vi ok on retombe en C\C++ mais c'est une bonne réponse à ceux qui disent que le C# est pas rapide, qu'on peut pas faire de jeu ou ce genre d'application.. Il ne s'agit pas de tout coder en unsafe bien sûr, juste les parties critiques..
lundi 4 juillet 2005 à 16:25:48 | Re : Stack vs Heap

ZogStriP

Membre Club Administrateur CodeS-SourceS
Ouai je sais, et je pense que c'est pour cette raison que MS a laissé un moyen d'utiliser du code unsafe :)

Je ne m'y connais pas du tout en unsafe, est ce que tu pourrais expliquer ce que c'est : Marshal.AllocCoTaskMem ???

Merci

ZogStriP
Mon Blog : IA pour Incomplet de l'Ancéphale
Mon Site
: Site web sur le projet
lundi 4 juillet 2005 à 16:45:29 | Re : Stack vs Heap

Lutinore

Administrateur CodeS-SourceS
C'est comme malloc en C, tu alloues de la mémoire NON managée et donc tu peux y accéder avec un pointeur sans devoir la fixer, c'est pratique qu'en tu travailles avec PInvoke et que tu as besoin d'un buffer qui ne bouge pas en mémoire..
lundi 4 juillet 2005 à 16:50:53 | Re : Stack vs Heap

ZogStriP

Membre Club Administrateur CodeS-SourceS
Si je comprend bien c'est la version non managé de :

fixed(....) ???

ZogStriP
Mon Blog : IA pour Incomplet de l'Ancéphale
Mon Site
: Site web sur le projet
lundi 4 juillet 2005 à 17:04:41 | Re : Stack vs Heap

Lutinore

Administrateur CodeS-SourceS

Pas vraiment, mais ca peut avoir la méme utilité, mais je n'imagine pas une application "fixer" un buffer durant tout le temps de son exécution.. de plus Microsoft préconise de fixer les objet le moins longtemps possible, surement pour ne pas bloquer le GC.


1 2

Cette discussion est classée dans : private, static, stack, heap, ticks


Répondre à ce message

Sujets en rapport avec ce message

Public Private Static... [ par lagoelle ] Salut,Je me rends compte que je stagne en C# et ce parce qu'il me manque certainement les fondements, les bases des choses importantes à assimiler (en Probleme d'IP [ par MorpionMx ] Bonjour,Voila, je développe un tout petit chat sans prétention, le probleme c'est que avec ce bout de code :private static Socket s = new Socket (addr Forcer l'activité d'une thread [ par Capitaine Iron ] Bonjours, alors voila ce que je voudrais faire:Je cré un objet qui instentie une icone de notification qui reste bien sagement en attente de recevoir sendmessage mouse [ par nicotwo ] Bonjour à tous, Je voudrais savoir comment fait-on pour envoyer des évènements à la souris et au clavier de façon à les contrôler via un programme.J'a Classe pour un timer [ par Seth77 ] Salutque pensez de ma classe Timer ..je suis partis d'une classe que j'ai trouve sur le site ...using System;using System.Runtime.InteropServices;usin Propriétés static sous ASP.NET [ par EmacLi ] Bonjour à tous,J'aurais voulu savoir si l'utilisation de propriétés et méthodes static dans un site ASP.NET etait génant pour la sécurité de celui ci. Erreur dans la msdn? [ par badrbadr ] Salut,Dans Msdn, ils disent que les assembly amis sont capables d'accéder aux types marqués internal, mais les types et membres marqués private resten Problèmes sur fonction + textbox [ par Jojo092 ] Bonsoir à tous, avant tout je ne savais pas trop ou placer ce message, donc les modos pourront le déplacer après, désolé pour ca.Sinon vpoilà mon prob Port serie / stack overflow [ par hetneo ] Salut les gens !   <p class="MsoNo GetScrollInfo sur VerticalScrollBar d'un RichTextBox [ par NeuroCypher ] Bonjour,Je veux recuperer la position de la VerticalScrollBar d'un RichTextBoxlorsque cette meme scrollbar a fini de bouger...J'ai donc commence par c


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,231 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales