WinFuture-Forum.de: [CLOSE PLS] C# Zeitdauer bei Array-Operationen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 2 Seiten +
  • 1
  • 2

[CLOSE PLS] C# Zeitdauer bei Array-Operationen Werte aus Byte-Array in String-Array kopieren

#16 _der dom_

  • Gruppe: Gäste

geschrieben 22. Juli 2011 - 22:08

Muss es denn zwangsweise eine Textbox sein? Du könntest dir doch auch alles in eine ListBox ausgeben lassen!?!?

Ich habs mir jetzt nicht bis ins Detail angeschaut aber kannst du das nicht mal mit einer for schleife durchlaufen lassen?

Was soll das ganze eigentlich bewirken? Ich steig da nicht hinter. Du füllst also ein Array und willst dort dann Textboxen füllen? Das dass für dich ewig erscheint ist klar - bei 80k würde mir das auch ewig vorkommen.

Habe selbst hier eine Table mit einem Inhalt von ca. 25k Einträgen und die Cbo oder ListBox zu füllen dauert einen Bruchteil einer Sekunde. Wenn du die Ausweichmöglichkeit hast, dann geh über die Listbox und packe beim IndexChanged_Event von der Listbox den selektierten Eintrag in die Textbox.
0

Anzeige



#17 _nobido_

  • Gruppe: Gäste

geschrieben 23. Juli 2011 - 11:27

Hiho@ der dom,

im Lauf des thread hatte ich es zwar schon einmal erwähnt, aber sei's drum. Es geht bei diesem Programm um eine simple 8bit-Verschlüsselung.

Eine Form mit 2 Textboxen -> Datei auswählen - kann eine unverschlüsselte sein oder eine verschlüsselte, wird dann in der 1sten Box angezeigt - numerischen Wert von 0 bis 255 eingeben (8bit eben).
Die Datei lade ich mir mit ReadAllLines in die Textbox (was recht fix geht) und per ReadAllBytes in ein Bytearray, in dem die einzelnen Zeichen sind die dann Zeichen für Zeichen mit dem numerischen Wert verknüpft werden und in einem 2ten Array abgelegt werden (in dem dann die verschlüsselten bzw. entschlüsselten Zeichen enthalten sind).


Ab hier stehen mir dann, soweit ich das beurteilen kann, zwei Wege offen.

1. Die einzelnen Zeichen aus dem 2ten Array in einen neuen String zu pressen (mit nem Konstrucktor) und den dann der (2ten) Textbox zuweisen (was mir aber doppelt gemoppelt workommt), oder die Zeichen direkt in die Textbox pressen (habe das mit Append gemacht)(und das scheint mir auch net mehr doppelt gemoppelt, da die Zuweisung direkt an die Textbox erfolgt). Allerdings wird der String wohl nach folgender Methode erzeugt: myString = myString + value
Das funzzt auch ganz gut und geht innerhalb einer Sekunde (bei ca. 80Kb). Ab dem Moment allerdings wo was in der Textbox angezeigt werden soll (ob nun per Zuweisung aus einem String oder per 'Append') dauert das halt ewig - im Gegensatz zu z.B. ReadAllLines.

Deshalb 2. Das 2te Array per 'WriteAllBytes' in eine Datei schreiben und den Inhalt dieser Datei dann per 'ReadAllLines' in die 2te Textbox rein pressen.

Nur: DAS kann es ja wohl nicht sein dass ich die Datei erst schreibe und dann den Inhalt an die Textbox gebe. Ich würd das gern per 1. erledigen. Ohne dieses lange Warten.



So, ich denke das war mehr als ausführlich. Ansonsten schieb ich den Quellcode auch gern auf Anfrage per Email rüber. Dann wirds evtl. verständlicher.

So und jetzt ist WE

tschoe


p.s. ob das nun per for-Schleife gebaut wird, per while (irgendwas) oder wie auch immer ist hierbei unerheblich, da das jeweilige Konstruckt nicht die Bremse ist.

das es nicht lange dauert die value-Liste von einer ComboBox oder einer ListBox zu füllen ist klar - da wird, wie du ja schon schreibst, nur eine Liste (im Hintergrund) gefüllt und nicht direkt zur Anzeige gebracht.

Dieser Beitrag wurde von nobido bearbeitet: 23. Juli 2011 - 11:32

0

#18 Mitglied ist offline   Flamme10 

  • Gruppe: Mitglieder
  • Beiträge: 1
  • Beigetreten: 30. Januar 12
  • Reputation: 0

geschrieben 30. Januar 2012 - 17:43

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections; //Arraylist

namespace Automobil
{
    public partial class Form1 : Form
    {
        Auto fahrzeug;
        PKW pkw_neu;
        LKW lkw_neu;
        ArrayList arrayList = new ArrayList(); 

        public Form1()
        {
            InitializeComponent();

            //Instanz einer Klasse durch Aufruf des Konstruktor
            fahrzeug = new Auto();
            pkw_neu = new PKW();
            lkw_neu = new LKW();
        }

        //Tanken
        private void cmd_tanken_Click(object sender, EventArgs e)
        {
            fahrzeug.tanken(Convert.ToDouble(txt_tanken.Text));
        }

        //Kilometer gefahren
        private void cmd_fahren_Click(object sender, EventArgs e)
        {
            fahrzeug.fahren(Convert.ToInt32(txt_verbrauch.Text));
            fahrzeug.verbrauch_durch();
        }

        //Abgespeichertes Fahrzeug anzeigen
        private void cmd_anzeigen_Click(object sender, EventArgs e)
        {
            /*lbl_kilometer.Text = "Kilometerstand: " + fahrzeug.kilometerstand + " km";
            fahrzeug.verbrauch_durch();
            lbl_tankinhalt.Text = "Verbrauch: " + fahrzeug.verbrauch + " l/100km";
            lbl_verbrauch.Text = "Tankinhalt: " + fahrzeug.tankinhalt + " Liter"; */

            //Jedes Object in arrayliste durchsuchen
            foreach (Object x in arrayList)
            {
                if (x.GetType() == typeof(PKW))
                {
                    try
                    {
                        PKW pkw_puffer = (PKW)x;

                        if (pkw_puffer.Name == autoliste.SelectedItem.ToString())
                        {
                            lbl_sitzplaetze.Visible = true;
                            txt_sitzplaetze.Visible = true;
                            lbl_achsen.Visible = false;
                            txt_achsen.Visible = false;

                            txt_name.Text = pkw_puffer.Name;
                            txt_sitzplaetze.Text = Convert.ToString(pkw_puffer.Sitzplaetze);
                            txt_kilometerstand.Text = Convert.ToString(pkw_puffer.kilometerstand);
                            txt_tanken.Text = Convert.ToString(pkw_puffer.tankinhalt);
                            txt_verbrauch.Text = Convert.ToString(pkw_puffer.verbrauch);
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Bitte Fahrzeug in Liste auswählen!\n" + ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
                else if (x.GetType() == typeof(LKW))
                {
                    LKW lkw_puffer = (LKW)x;

                    try
                    {
                        if (lkw_puffer.Name == autoliste.SelectedItem.ToString())
                        {
                            lbl_achsen.Visible = true;
                            txt_achsen.Visible = true;
                            lbl_sitzplaetze.Visible = false;
                            txt_sitzplaetze.Visible = false;

                            txt_name.Text = lkw_puffer.Name;
                            txt_achsen.Text = Convert.ToString(lkw_puffer.Achsen);
                            txt_kilometerstand.Text = Convert.ToString(lkw_puffer.kilometerstand);
                            txt_tanken.Text = Convert.ToString(lkw_puffer.tankinhalt);
                            txt_verbrauch.Text = Convert.ToString(lkw_puffer.verbrauch);
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Bitte Fahrzeug in Liste auswählen!\n" + ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
                    }
                }
            }

           
        }

        private void cmd_speichern_Click(object sender, EventArgs e)
        {
            if (rb_lkw.Checked)
            {
                //Wenn falsche Werte eingegeben werden, erscheint ein Fehler
                try
                {
                    lkw_neu = new LKW();
                    lkw_neu.Name = txt_name.Text;
                    lkw_neu.Achsen = Convert.ToInt32(txt_achsen.Text);
                    lkw_neu.kilometerstand = Convert.ToInt32(txt_kilometerstand.Text);
                    lkw_neu.tankinhalt = Convert.ToInt32(txt_tanken.Text);
                    lkw_neu.verbrauch = Convert.ToDouble(txt_verbrauch.Text);
                    autoliste.Items.Add(lkw_neu.Name);
                    arrayList.Add(lkw_neu);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Fehler\n" + ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
            else if (rb_pkw.Checked)
            {
                //Wenn falsche Werte eingegeben werden, erscheint ein Fehler
                try
                {
                    pkw_neu = new PKW();
                    pkw_neu.Name = txt_name.Text;
                    pkw_neu.Sitzplaetze = Convert.ToInt32(txt_sitzplaetze.Text);
                    pkw_neu.kilometerstand = Convert.ToInt32(txt_kilometerstand.Text);
                    pkw_neu.tankinhalt = Convert.ToInt32(txt_tanken.Text);
                    pkw_neu.verbrauch = Convert.ToDouble(txt_verbrauch.Text);
                    autoliste.Items.Add(pkw_neu.Name);
                    arrayList.Add(pkw_neu);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Fehler: " + ex.Message);
                }
            }
            else
            {
                MessageBox.Show("Bitte einen Autotypen wählen!", "",MessageBoxButtons.OK, MessageBoxIcon.Warning);
            } 
        }

        private void rb_pkw_CheckedChanged(object sender, EventArgs e)
        {
            lbl_sitzplaetze.Visible = true;
            txt_sitzplaetze.Visible = true;
            lbl_achsen.Visible = false;
            txt_achsen.Visible = false;
        }

        private void rb_lkw_CheckedChanged(object sender, EventArgs e)
        {
            lbl_achsen.Visible = true;
            txt_achsen.Visible = true;
            lbl_sitzplaetze.Visible = false;
            txt_sitzplaetze.Visible = false;
        }

        private void label2_Click(object sender, EventArgs e)
        {

        }
    }
}
###############################################################
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Automobil
{
    public class Auto
    {
        public Auto()
        {}

        public int kilometerstand =0;
        public double verbrauch =0;
        public double tankinhalt =0;
        public string Name;

        public void tanken(double tankfuellmenge)
        {
            tankinhalt = tankinhalt + tankfuellmenge;
        }

        public void fahren(int kilometer_gefahren)  
        {
            kilometerstand = kilometerstand + kilometer_gefahren;
            tankinhalt = tankinhalt - (verbrauch/100)*kilometer_gefahren;
        }

        public void verbrauch_durch()
        {
            verbrauch = tankinhalt / kilometerstand;
        }

    }
}

##########################################################
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Automobil
{
    public class LKW : Auto
    {
        public int Achsen;
    }
}

Dieser Beitrag wurde von Wiesel bearbeitet: 30. Januar 2012 - 18:03
Änderungsgrund: geboxt

0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0