Autor Beitrag
daniel1mtb
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 24.02.16 22:31 
Hallo Zusammen :)

Versuch mich seit neustem an MySQL Datenbanken. Eine Verbindung hab ich hin bekommen und das Auslesen/Bearbeiten der Daten auch kein Problemm.
Jedoch ist es ziemlich langsam :/ Hab zB die abfrage der Datenbank auf jede 500ms eingestellt. Meine Animation im Programm hängt sich jede 500ms kurz auf, sieht ganz schön kake aus <.<

Hier der Code womit ich auf die Datenbank zugreife um alle Daten aus der Tabelle aus zu lesen:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
static public void ReadData_Users(string eigener_name)
        {
            try
            {
                if (connection.State == ConnectionState.Closed)
                    connection.Open();
                MySqlCommand cmd = new MySqlCommand("SELECT * FROM db_player", connection);
                MySqlDataReader dataReader = cmd.ExecuteReader();

                spielernamen = new string[count_Daten];
                positionen = new string[count_Daten];
                animationen = new string[count_Daten];
                richtungen = new string[count_Daten];

                count_Daten = 0;
                while (dataReader.Read())
                {

                        spielernamen[count_Daten] = dataReader.GetString("Spielername");
                        positionen[count_Daten] = dataReader.GetString("Position");
                        animationen[count_Daten] = dataReader.GetString("Animation");
                        richtungen[count_Daten] = dataReader.GetString("RichtungRechts");

                        count_Daten++;
                    
                }

            }
            catch (MySqlException exception)
            {
                MessageBox.Show(exception.ToString());
            }
            finally
            {
                connection.Close();
            }
        }

Woran könnte das liegen? An meinem Code? Oder vieleicht doch einfach nur an dem Anbieter der MySQL Datenbank Seite? (ist natürlich nen Kostenloser Anbieter^^)

Vielen Dank für die Hilfe :) !

Moderiert von user profile iconNarses: Quote- durch C#-Tags ersetzt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4290
Erhaltene Danke: 863


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 24.02.16 22:37 
Lagere den Zugriff auf die Datenbank in einen Thread aus so das der Hauptthread sich nur um die UI kümmern mus und somit unbelastet irgendwelche Animationen zeichnen kann.

Dein Code sieht gefühlt kaput aus. Woher kommt eine sinnvolle Vorbelegung von count_Daten um die Array Größen festzulegen und wieso sind das überhaupt Arrays?
daniel1mtb Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 24.02.16 22:51 
Oki hört sich gut an ich probier das mal. Danke sehr!

count_Daten ist die Mänge der Daten in der Tabelle, weiss bisher noch nicht wie ich diese direkt Auslesen kann.
Die Arrays sind dazu da damit die Werte halt alle zusammenhängend abgespeichert werden. Nicht gut?^^
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4290
Erhaltene Danke: 863


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 24.02.16 23:39 
Wenn du nicht weiß wieviele Datensätze es gibt dann nimm kein Array sondern eine List<T>. Die hat eine dynamische Größe. Heißt du kannst per Add Methode immer weitere Datensätze hinzufügen ohne vorher wissen zu müssen wie groß die werden kann.

Und speichere die Daten nicht in 4 Listen/Arrays sondern in 1er. Dazu schreib dir eine Klasse (die du z.B. Player nennst, denn Namen deduziere ich jetzt aus dem Tabellennamen wenn der nicht passt denkt dir was passendes aus) und gibt der Klasse 4 Properties die den Daten in den jetzigen 4 Array entsprechen.

Der Codeauschnitt sähe dann eher so aus:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
List<Player> players = new List<Player>();
// ... weiterer Code
using (var connection = new MySqlConnection("MyLovelyConnectionString"))
{
    connection.Open();
    using (var cmd = new MySqlCommand("SELECT Spielername, Position, Animation, RichtungRechts FROM db_player", connection))
    {
        using (var dataReader = cmd.ExecuteReader())
        {
            while (dataReader.Read())
            {
                players.Add(
                    new Player()
                    {
                        Name = dataReader.GetString("Spielername"),
                        Position = dataReader.GetString("Position"),
                        Animation = dataReader.GetString("Animation"),
                        Richtung = dataReader.GetString("RichtungRechts")
                    });
            }
        }
    }
}

// und die Player Klassen Definition
public class Player
{
    public string Name { get; set; }
    public string Position { get; set; }
    public string Animation { get; set; }
    public string Richtung { get; set; }
}
daniel1mtb Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 24.02.16 23:46 
Oh ja hast recht^^ danke sehr :)
Hab das mit Thread ausprobiert, klappt wunderbar! Vielen dank!