eine kleine Frage...



  • looool

    da kennt sich einer aus, hm? 😃



  • *rofl*

    Konsolenprogramme sind nicht schneller. Nur da hast du halt ne Schleife die einfach durchläuft und keinen Timer mit ner bestimmten Auflösung. In ner Windows Forms Anwendung könntest du genauso gut in ner Funktion so eine Schleife laufen lassen und die Geschwindigkeit würde nur von deinem PC abhängen.

    Aber der Rest hört sich lustig an. Wenn du wirklich Wörter bei ner Website z.b. ausprobieren willst, da hat Checker&Murckser ja schon was zu gesagt. Die Antwortzeiten sind viel zu lang beim Internet, da würde selbst nen Timer mit 20ms zu schnell sein. Dein Code den du in der Schleife ausführst, dürfte dann auch nie länger dauern als ne ms wenn du nen ms Timer haben willst, und da kann man nicht viel machen.



  • kenn halt einige die nen eigenen Webserver haben und die machen das auch so ... 🙂 nicht, das da jemand was falsches von mir denkt 😉



  • Talla schrieb:

    *rofl*

    Konsolenprogramme sind nicht schneller. Nur da hast du halt ne Schleife die einfach durchläuft und keinen Timer mit ner bestimmten Auflösung. In ner Windows Forms Anwendung könntest du genauso gut in ner Funktion so eine Schleife laufen lassen und die Geschwindigkeit würde nur von deinem PC abhängen.

    NEIN! eben nicht... entweder du hast es noch nich ausprobiert oder du weißt es nicht! Ich hab es eben ausprobiert, sdonst würde ich sowas nicht schreiben!
    SChleife mit Konsole ist VIEL schneller als ne SCHLEIFE mit WIndows Forms!!!
    probiers aus!

    mfg



  • Ich würde eher sagen du probierst es aus. Hab dir hier: http://www.csharp-pro.de/ccount/click.php?id=4
    mal nen Beispielprojekt hingepackt. Des einzigste was die Anwendung macht ist ne Variable 100 Millionen mal zu erhöhen - dauert nen bissle, bei mir um die 5 Sekunden - ist halt nur Debugmodus. Wie dem auch sei. Sowohl in der Konsolenanwendung, als auch in der Windows Formsanwendung braucht des gleich lang! Warum sollte es auch in der Windows Forms Anwendung länger dauern?

    public class Test 
        {
            public static TimeSpan LongTest()
            {
                DateTime start = DateTime.Now;
                int dummy = 0;
                for (int i = 0; i < 1000000000; i++) {
                    dummy++;
                }
                DateTime end = DateTime.Now;
                return end - start;
            }
        }
    

    Das ist der Testcode und der wird einmal in der Konsoleanwendung aufgerufen:

    Console.WriteLine(Test.LongTest());
    

    als auch in der Windows Forms Anwendung:

    label1.Text = Test.LongTest().ToString();
    

    Und, oh Wunder, kommt doch das gleiche raus 😉

    EDIT: Upps, seh grad das es ja ne Milliarde Opps sind, nicht nur 100 Millionen, aber egal 😉



  • Foxx90, bist du zufällig SPS-Programmierer?



  • also ok du hast das anders programmiert ...
    ich hab das bei windows forms anders gemacht mom(hmm außerdem habe ich die konsolen anwendung in c++ geschrieben was aber nix am ergebnis ändern sollte):

    Windows Forms

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    namespace Runs
    {
        public partial class Form1 : Form
        {
            int dummy = 0;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                for (decimal test = 0; test < 100000000; test++)
                {
                    dummy++;
    
                }
    
                textBox1.Text = Convert.ToString(dummy);
    
            }
        }
    }
    

    Also wenn ich dieses Programm ausführe, dauert es ohne Ende also ich hab zwar nur ein paar minuten gewartet aber ich denke das würde so weiter gehen...

    Konsole

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    
        int a = 0;
         for(int i = 0;i < 100000000;i ++)a++;
    
         cout << a << endl;
    
        system("PAUSE");
    
        return 0;
    }
    

    hier dauert es nur ein paar hundertstel sekunden...

    also bestimmt mache ich was falsch, sacht mir doch bidde was^^

    mfg



  • Man könnte fast meinen das ist Absicht...

    Erstmal ist deine Konsolenanwendung unmanaged Code und deine Windows Forms Anwendung managed - das macht schon nen Unterschied aus. Was aber viel viel schlimmer ist, du verwendest decimal bei der Forms Anwendung als Datentyp und bei der Konsole nen int. Decimal ist nen 128 Bit Fließkommawert, sprich, auf ner 32 Bit CPU brauchst du schon 4 Taktzyklen um den Wert überhaupt in die CPU zu kopieren bevor dann die die FPU damit rechnen kann - Fließkommaberechnungen an sich sind aber nochmals langsamer auf normalen CPUs als einfache Ganzzahlberechnungen - kein Wunder das der Code also langsam ist. Du vergleichst also nicht Äpfel mit Birnen, sondern eher Äpfel mit Gänsen - sprich was total anderes...

    Wenn du vergleichst, dann bitte auch einigermaßen objektiv. Wenn du den Code wie ich ihn geschrieben hab(nämlich für die Konsole und Forms Anwendung gleich), ausführst, dann siehst du das er jeweils gleich schnell ausgeführt wird, egal ob Konsole oder Windows Forms Anwendung.

    Was du noch beachten musst: Guck was der Compiler wegoptimiert. Bei meinem Beispielprojekt sind beide mit Absicht im Debugmodus das der Compiler da nichts wegoptimiert. Im normalen Release werden die Schleifen nämlich einfach rausgeschmissen weil die zunichts gut sind, und dann ekomm ich auch in beiden Anwendungen als Laufzeit 0 für die Funktion.



  • aso, nagut dann werd ich das mal ausprobieren.

    Aber glaub mir eins, ich schreib hier garantiert nicht iwas mit absicht falsch rein!



  • so habs jetzt ausprobiert, ok ihr hattet recht, also danke für die Beantwortung dieser wahrscheinlich dummen Fragerei^^

    mfg


Anmelden zum Antworten