Wieviel klassen haben große Projekte?



  • Original erstellt von Shade Of Mine:
    In Java vielleicht, aber sicher nicht in C++ 😉

    Du kannst mal davon ausgehen, dass du in C++ auch nen ordentlichen Performanceschub kriegen kannst, wenn du in einer Methode, die sehr oft durchlaufen wird, Objekte wegoptimierst.



  • Du kannst mal davon ausgehen, dass du in C++ auch nen ordentlichen Performanceschub kriegen kannst, wenn du in einer Methode, die sehr oft durchlaufen wird, Objekte wegoptimierst

    Hä? Natürlich ist kein Code immer schneller als viel Code. Aber was hat das mit Objekten oder Klassen zu tun. Was Shade meinte war doch nur, dass ein Programm mit Klassen nicht langsamer sein muss als eins ohne. Das gilt zumindest für C++.



  • Objekte erzeugen kostet Zeit, richtig?
    Objekte löschen kostet Zeit, richtig?
    Kostet ein Zugriff auf Methoden und Variablen von Objekten nicht auch mehr Zeit, als ein Zugriff auf globale Methoden und Variablen?



  • Original erstellt von Gregor:
    Objekte erzeugen kostet Zeit, richtig?

    ja

    Objekte löschen kostet Zeit, richtig?

    ja

    Kostet ein Zugriff auf Methoden und Variablen von Objekten nicht auch mehr Zeit, als ein Zugriff auf globale Methoden und Variablen?

    nein

    gib mal ein beispiel mit source code!

    Sicher kostet das erstellen eines Objektes Zeit, aber wenn ich strukturiert programmiere dann habe ich statt dem objekt eben etwas anderes - zB eine struct oder sonstwas.

    und dieses etwas muss auch erzeugt und zerstoert werden...

    natuerlich muss man auch vernueftig programmieren... ein vector<> ist langsamer als ein statisches array -> aber dann kann man ja auch eine klasse StaticArray<> verwenden, und schon ist man wieder gleich schnell.



  • Solche Diskussionen ob funktionale programme oder OOP schneller oder langsamer sind sind wirklich überflüssig, da der leistungsunterschied wenn dann nur max. O(n) ist. Und in der Zeit wo man hier diskutiert oder da was verbessert sind die rechner schneller geworden und der leistungsunterschied geht gegen 0.



  • OK! Ihr habt mich vorerst vom Gegenteil überzeugt!



  • Original erstellt von <Günter>:
    Hallo!
    was denkt ihr, wieviele klassen z.B. windows ... hat?
    ...

    Naja, ich würd sagen, dass Windows direkt keine einzige Klasse hat, da es meines Wissens nach komplett in C geschrieben wurde! 😃



  • UT 2003 hat ca. eigene 150 Klassen + fremde 3D Engine



  • So! jetzt bin ich vorerst wieder nicht mehr überzeugt. Code :

    #include <iostream>
    #include <stdlib.h>
    #include <ctime>
    
    class TestClass
    {
       private :
    
       int a;
       int b;
       public :
    
       TestClass()
       :a(5),b(0)
       {
       }
    
       void doSomething ()
       {
          b+=a;
       }
       int getResult () const
       {
          return b;
       }
    };
    
    int doSomething ()
    {
       return 5;
    }
    
    int main(int argc, char *argv[])
    {
      const int end = 50000;
      int b=0;
      int i,j;
      int a = 5;
      time_t time;
      TestClass testClass = TestClass();
      time = clock();
      for (i = 0 ; i < end ; ++i)
      {
         for (j = 0 ; j < end ; ++j)
         {
            testClass.doSomething();
         }
      }
      b=testClass.getResult();
      std::cout << clock() - time << "ms" << std::endl;
      std::cout << b << std::endl;
      b=0;
      time = clock();
      for (i = 0 ; i < end ; ++i)
      {
         for (j = 0 ; j < end ; ++j)
         {
            b+=doSomething();
         }
      }
      std::cout << clock() - time << "ms" << std::endl;
      std::cout << b << std::endl;
      b=0;
      time = clock();
      for (i = 0 ; i < end ; ++i)
      {
         for (j = 0 ; j < end ; ++j)
         {
            b+=a;
         }
      }
      std::cout << clock() - time << "ms" << std::endl;
      std::cout << b << std::endl;
      system("PAUSE");   
      return 0;
    }
    

    Mit dem Objekt dauert es bei mir fast 10 mal so lange.

    [ Dieser Beitrag wurde am 29.11.2002 um 00:23 Uhr von Gregor editiert. ]



  • feigling 😡
    was stand da gerade? *wissen will*



  • Original erstellt von <...>:
    feigling 😡
    was stand da gerade? *wissen will*

    Jetzt steht was ähnliches da. Vorhin hatte ich nen kleinen Fehler drin, bzw. es hat an was anderem gelegen. ...jetzt wahrscheinlich auch : Durch das Objekt kann eine bestimmte Sache nicht mehr optimiert werden. ...ihr kommt schon drauf, was es ist. 🙂



  • Ich denke mal OOP ansich ist keine Bremse, aber man ist als OOP-Programmierer glaub ich ein bisschen großzügiger und baut in seine Klasse noch ein bisschen Extrazeugs rein, so dass das Programm geringfügig (eigentlich nicht merkbar) langsamer wird. 😕 😕 😕



  • Original erstellt von <OOPler>:
    Ich denke mal OOP ansich ist keine Bremse, aber man ist als OOP-Programmierer glaub ich ein bisschen großzügiger und baut in seine Klasse noch ein bisschen Extrazeugs rein, so dass das Programm geringfügig (eigentlich nicht merkbar) langsamer wird. 😕 😕 😕

    Du merkst nen Faktor 10 bei der Geschwindigkeit nicht?! 😮 🙂
    Sicher : Das ist ein extremes Beispiel. Aber wenn man Pech hat, dann baut man sich sowas in irgendeiner Form in einen Programmteil ein, der schnell sein muss.



  • LOL, Gregor, ich hab deinen Code weder ausprobiert noch angeschaut. Wie kannst du mir sowas unterstellen? :p



  • Original erstellt von <OOPler>:
    LOL, Gregor, ich hab deinen Code weder ausprobiert noch angeschaut. Wie kannst du mir sowas unterstellen? :p

    Erst soll ich Code schreiben und dann liest ihn keiner und sagt mir, wo ich die fiese Bremse eingebaut habe! 😞 ...Naja! Wenigstens weiß ich, was bremst! Aber ich sag es euch mal nicht! :p



  • teste mal hier mit

    class TestClass
    {
       private :
       int b;
       public :
    
       TestClass()
       :b(0)
       {
       }
    
       void doSomething ()
       {
          b += 5;
       }
       int getResult () const
       {
          return b;
       }
    };
    

    außerdem

    int main(int argc, char *argv[])
    {
      const int end = 50000;
      int b=0;
      int i,j;
      int a = 5;
      time_t time;
      TestClass testClass = TestClass();
      time = clock();
    

    http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=Init#Answ
    und vermeide Standard Ctor aufrufe

    und noch was, wie komms du nur! die Ausgabe mit zu messen?

    [ Dieser Beitrag wurde am 29.11.2002 um 01:13 Uhr von Dimah editiert. ]



  • Da kommt schon gleich jemand der sich das ganze mal anschaut. Nur Geduld. 😃 Ich hab heute einfach keine Lust zu raten :p



  • Original erstellt von Dimah:
    **und noch was, wie komms du nur! die Ausgabe mit zu messen?

    **

    ups, sorry verkuckt



  • mach mal auß

    b=testClass.getResult();
      std::cout << clock() - time << "ms" << std::endl;
      std::cout << b << std::endl;
    

    ein

    std::cout << clock() - time << "ms" << std::endl;
      std::cout << testClass.getResult() << std::endl;
    

    nicht das es viel speed bringen würde, aber sind sie gleicher

    [ Dieser Beitrag wurde am 29.11.2002 um 01:19 Uhr von Dimah editiert. ]



  • OK! Du hast das a entdeckt! ...viel zu schnell! 😞 🙂

    ...aber hier sieht es genau gleich aus und da kann man das a nicht so leicht löschen :

    #include <iostream>
    #include <stdlib.h>
    #include <ctime>
    
    class TestClass
    {
       private :
    
       int a;
       int b;
       public :
    
       TestClass()
       :a(1),b(0)
       {
       }
    
       void doSomething ()
       {
          a <<= 1;
          a += 1;
          b+=a;
       }
       int getResult () const
       {
          return b;
       }
    };
    
    int main(int argc, char *argv[])
    {
      const int end = 35000;
      int b=0;
      int i,j;
      int a = 1;
      time_t time;
      TestClass testClass;
      time = clock();
      for (i = 0 ; i < end ; ++i)
      {
         for (j = 0 ; j < end ; ++j)
         {
            testClass.doSomething();
         }
      }
      std::cout << clock() - time << "ms" << std::endl;
      std::cout << testClass.getResult() << std::endl;
      time = clock();
      for (i = 0 ; i < end ; ++i)
      {
         for (j = 0 ; j < end ; ++j)
         {
            a <<= 1;
            a += 1;
            b+=a;
         }
      }
      std::cout << clock() - time << "ms" << std::endl;
      std::cout << b << std::endl;
      system("PAUSE");   
      return 0;
    }
    

    Naja! Faktor 3 noch!

    [ Dieser Beitrag wurde am 29.11.2002 um 01:29 Uhr von Gregor editiert. ]


Anmelden zum Antworten