Autor Beitrag
avoid
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: So 22.07.12 12:16 
problem:
- meine verschachtelung ist zu träge in der abarbeitung.

aufgabe der verschachtelung:
- siehe kommentare im quellcode.
- "mit diesem code möchte ich eingelesene daten mit vorhandenen abgleichen
und je nach ergebniss darstellen, bearbeiten und darstellen oder löschen".

frage:
- wie gehts besser (schneller in der abarbeitung)?

aktuell habe ich einen code der diesem kommentierten pseudocode entspricht:
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:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
while (i < todaydata.Length) // anzahl der datensätze
{
    string zeile = todaydata[i]; // aktueller datensatz zur bearbeitung
    int lenge = zeile.Length; // zeichen länge des aktuellen datensatz
    if (lenge >= 76)
    {
        // hier wird der datensatz in seine werte zerlegt
        if (dataSet1.Tables["LiveView"].Rows.Count > 0// wenn aktuell daten angezeigt werden
        {
            // prüfen ob schon ein datensatz mit parameter1 angezeigt wird
            for (int y = 0; y < dataSet1.Tables["LiveView"].Rows.Count; ++y) // durchlaufe alle angezeigten datensätze
            {
                if (datensatz.parameter1 == dataSet1.Tables["LiveView"].Rows[y]["parameter1"].ToString()) // datensatz mit gleichem parameter1 gefunden
                {
                    if (dataSet1.Tables["LiveView"].Rows[y]["typ"].ToString() == 1)
                    {
                        if (datensatz.typ == darf angezeigt werden)
                        {
                            // datensatz ändern zu typ 5
                        }
                    }
                    if (dataSet1.Tables["LiveView"].Rows[y]["typ"].ToString() == 2)
                    {
                        if (datensatz.typ == darf angezeigt werden)
                        {
                            // datensatz ändern zu typ 8
                        }
                    }
                    if (dataSet1.Tables["LiveView"].Rows[y]["typ"].ToString() == 3)
                    {
                        if (datensatz.typ == darf angezeigt werden)
                        {
                            // datensatz ändern zu typ 9
                        }
                    }
                }
                else // datensatz mit parameter1 nicht gefunden
                {
                    if (datensatz.typ == darf angezeigt werden)
                    {
                        // datensatz anzeigen
                    }
                }
            }
        }
        else // wenn aktuell keine daten angezeigt werden
        {
            if (datensatz.typ == darf angezeigt werden)
            {
                // datensatz anzeigen
            }
        }
    }
}

ich hoffe mir kann jemand dabei helfen diesen code um zu bauen das er nicht mehr so träge ist.
gruß, avoid

edit: beitrag umgeschrieben um ihn verständlicher zu machen.

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke


Zuletzt bearbeitet von avoid am Mi 25.07.12 09:22, insgesamt 3-mal bearbeitet
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4805
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 22.07.12 12:51 
Hallo avoid,

bitte tue uns Helfern einen Gefallen und entferne die überflüssigen Leerzeichen am Anfang jeder Zeile (ich weiß, das ist ein bißchen Arbeit - am einfachsten wohl mit dem VS den selektierten Code per "Shift+Tab" formatieren und hier dann einfügen).

Und du solltest vorallendingen beschreiben, was dein Code machen soll, damit wir passende Optimierungen vorschlagen können.
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Mo 23.07.12 13:32 
im grunde hab ich eine lange datei, die ich wieder und wieder ab rufe.
in der datei werden immer wieder neue daten unten angehängt auf die ich reagiere.

ich hab nun erst mal folgendes gemacht:
ich prüfe ob die bisher verarbeitetn datensätze in der aktuellen datei enthalten sind
und wenn ja entferne ich diese daraus um die schon bearbeiten datensätze nicht nochmal zu verarbeiten.
so bleiben nur neue daten die seit dem letzten durchlauf entstanden sind übrig.

das dataset1 ist für mich in diesem fall der puffer der den aktuellen bearbeitungsstand enthält.
was quasi noch nicht abgeschlossen ist.

ich denke das spart mir schon mal eine menge zeit noch bevor der obige code los geht.

obige code stell ich nun mehr in diese richtung um:
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:
for (solange zähler1 < anzahl der datensätze; ++zähler)
{
    if (aktueller datensatz == darf angezeigt werden)
    {
        if (aktueller datensatz != angezeigt)
        {
          // zeige daten an
        }
    }
    else
    {
        if (aktueller datensatz == darf daten bearbeiten)
        {
            for (solange zähler2 < dataSet1.Tables["LiveView"].Rows.Count; ++zähler2)
            {
                if (richtige zeile (parameter1) gefunden)
                {
                    // versuche zu bearbeiten
                }
            }
        }
        else
        {
            for (solange zähler2 < dataSet1.Tables["LiveView"].Rows.Count; ++zähler2)
            {
                if (richtige zeile (parameter1) gefunden)
                {
                    // versuche zu löschen
                }
            }
        }
    }
}

so klingt das konstruckt logischer oder?
ich versuche das mal umzusetzen und wenn es so schneller geht sag ich bescheid.

gruß, avoid

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
edmtop
Hält's aus hier
Beiträge: 6

WinXP, Win7, Win2K3, Win2K8, Linux
C++, c#, Java, Delphi7-Delphi XE2, PHP
BeitragVerfasst: Mo 23.07.12 14:04 
Hallo,

wenn ich das richtig verstanden habe willst nur die Datensätze prüfen die bereits angelegt sind oder falls nicht einen neuen anzulegen.

Wie wäre es wenn du die Daten schon mal einschränkst z.B.

ausblenden C#-Quelltext
1:
dataSet1.Tables["LiveView"].Select("parameter1 = " + datensatz.parameter1)					


Damit musst du nicht alle Sätze betrachten. Falls kein Datensatz da ist kannst direkt einen neuen anlegen sonst nur die eingeschränkte Auswahl vergleichen.
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Mo 23.07.12 16:21 
select funktioniert hier wohl auch wie bei anderen select abfragen?
cool.

wie müßte ich die abfrage zusammenstellen wenn ich das dataset in der spalte "Typ"
nach dem inhalt der string variablen typ durchsuchen will?

im grunde geht es doch nur so oder?
ausblenden C#-Quelltext
1:
DataRow[] liste = dataSet1.Tables["LiveView"].Select("Typ = 'bla'");					


aber ich bekomme aus dem DataRow nicht die dataSet koordinaten um z.b. den eintrag zu löschen oder zu bearbeiten.

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
edmtop
Hält's aus hier
Beiträge: 6

WinXP, Win7, Win2K3, Win2K8, Linux
C++, c#, Java, Delphi7-Delphi XE2, PHP
BeitragVerfasst: Di 24.07.12 07:20 
Das wäre so ein kleiner Beispiel wie es aussehen könnte.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
DataRow[] liste = dataSet1.Tables["LiveView"].Select("Typ = 'bla'");
foreach (DataRow row in liste)
{
   row["Column"] = "Wert";
   //oder
   row.Delete();
}
dataSet1.AcceptChanges();
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Di 24.07.12 18:41 
kalppt wie du es beschrieben hast.

gibt es eine derartige möglichkeit auch für for schleifen?
die sind leider noch das einzige das sehr lange braucht.

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
edmtop
Hält's aus hier
Beiträge: 6

WinXP, Win7, Win2K3, Win2K8, Linux
C++, c#, Java, Delphi7-Delphi XE2, PHP
BeitragVerfasst: Mi 25.07.12 07:19 
der Beispiel war ja für den Ersatz der for schleife, da du damit nicht über den ganzen dataset scrollen muss und nur die Zeilen erhellst die du zum bearbeiten brauchst. Um die while schleife zu optimieren musste man wissen was davor passiert, woher das die variable i kommt. Welche Vorbedingungen vorhanden sind um die schritte danach zu optimieren.
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Mi 25.07.12 09:21 
die while schleife aus beitrag 1 ist jetzt eine for schleife.
ausblenden C#-Quelltext
1:
for (int i = 0; i < todaydata.Length; ++i)					

damit durchlaufe ich im grunde alle neuen datensätze.

da ich nun schon zuvor einenabgleich zwischen "daten vom letzten durchlauf" und "daten vom aktuellen durchlauf" mache
habe ich ja nur noch die wirklich seit dem letzten mal dazu gekommenen daten zu verarbeiten.

deine select lösung hilft mir dabei die angezeigten daten schneller zu prüfen,
wenn ein neuer datensatz einen angezeigten datensatz ändern oder löschen soll.

doch denwirklichen zeitfresser hab ich heute erst gefunden.
ich rufe die daten mittels "WebClient" ab.
nach dem start meiner anwendung braucht der WebClient immer erst mal ca. 10sec um an zu springen
obwohl er nur eine 4 bis 10 kb textdatei laden muß.
naja liegt evtl. auch am vpn.

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke