Autor Beitrag
mexx
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Do 19.01.06 09:47 
Hallo,

ich habe ein kleine Anwendung geschrieben, die meinen Kollegen und mir das Arbeiten leichter machen soll. Wir verwalten ca. 200 PCs und nutzen eine Remoteanwendung, um auf die PCs zuzugreifen. Da wir aufgund dieser Anzahl eine immer aktuelle Tabelle mit den IP der Mitarbeiter brauchen, habe ich folgende Mimik entwickelt.

Bei jeder Anmeldung eines Users an den Domain-Controller wird eine Anwendung gestartet, die die IP ausliest und diese mir in eine INI schreibt, welche sich in einem öffentlichen Verzeichniss auf einem Samba befindet.

Beispielaufbau:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
[amayer]
IP=192.168.1.230
PC-Name=CLIENT30
Zeit=08:03:31
Datum=19.01.2006
IE-Version=6.0.2800.1106
OS-Version=Windows 2000 Service Pack 4
Phone=181


Diese INI wird vom eigentlichen Programm beim Start meines Rechners ausgelesen. Kleine Funktionen ermöglichen mir es, aus dem Programm herraus, andere administrative Anwendungen zu startetn, welche die IP als Parameter übergeben bekommen. Das nur am Rande.

Hier die Source zum auslesen der Daten vom eigentlichen Programm.

ausblenden volle Höhe Delphi-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:
55:
56:
57:
58:
try
  //Daten auslesen

  //Ini verbinden
  config := TIniFile.Create('\\192.168.1.8\IP\config.ini');

  //Sektionen auslesen
  config.ReadSections(ListBox1.Items);



  MainForm.Show;
     for i := 0 to ListBox1.Count - 1 do
      begin

       MainForm.Update;
       MainForm.Repaint;
       MainForm.Refresh;
       //orginalen Eintrag auslesen
       Eintrag := ListBox1.Items.Strings[i];

       //IP, PC-Name, Datum, Uhrzeit, IE, Win auslesen
       IP   := config.ReadString(Eintrag, 'IP''');
       IPs[i] := IP;
       PC   := config.ReadString(Eintrag, 'PC-Name''');
       PCs[i] := PC;
       Time := config.ReadString(Eintrag, 'Zeit''');
       Zeits[i] := Time;
       Date := config.ReadString(Eintrag, 'Datum''');
       Datums[i] := Date;
       Phone := config.ReadString(Eintrag, 'Phone''');
       Phones[i] := Phone;
       IEV := config.ReadString(Eintrag, 'IE-Version''');
       IEVs[i] := IEV;
       Win := config.ReadString(Eintrag, 'OS-Version''');
       Wins[i] := Win;


      //Listview füllen
      with ListView1 do
       begin
        ListItem := Items.Add;
        Listitem.Caption := Eintrag;

        ListItem.SubItems.Add(IPs[i]);
        ListItem.SubItems.Add(PCs[i]);
        ListItem.SubItems.Add(Zeits[i]);
        ListItem.SubItems.Add(Datums[i]);
        ListItem.SubItems.Add(Phones[i]);
        ListItem.SubItems.Add(IEVS[i]);
        ListItem.SubItems.Add(Wins[i]);

       end;



     end;
       config.Free;


Ich betone, dass die Zweckdienlichkeit größeren Wert hat, als die professionalität der Source. Jedoch komme ich nun zum Problem. Mein Rechner baut die Inhalte des ListView langsamer auf, als der Rechner meines Kollegen. Warum?

Die Laptops sind nahezu Leistungsgleich, hängen am selben Netz, Kabel wurden auch schon getauscht.
Ich verlange ja nicht viel von meinen Laptop. Das ist ja keine anspruchsvolle Aufgabe für den Rechner. Also warum geht das so langsam? Habt Ihr eine Idee??
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 19.01.06 10:43 
Moin!

Hätte da zwei Ideen:

a) Stell mal auf TMemIniFile um
b) Mach vorher eine lokale Kopie und holdas nicht aus dem Netz

cu
Narses
mexx Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Do 19.01.06 14:22 
Eine lokale Kopie bringt auch keine Besserung. Der Vorgang dauert immernoch länger, als bei meinen Partner. Das konnte auch nicht die Ursache sein. Da ja mein Partner die Daten auch über das Netzwerk bezieht und es dort schneller geht.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 19.01.06 14:28 
Moin!

Definier doch mal den Zeitunterschied? 1 Sekunde, 1 Stunde... ? Wieviele Items? :wink:

cu
Narses
mexx Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Do 19.01.06 14:31 
44 Items bei mir dauert es pro Item 1 Sekunde. Beim Kollegen der gesamte Aufbau 1-2 Sekunden.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 19.01.06 14:36 
Moin!

Warum ist das:
ausblenden Delphi-Quelltext
1:
2:
3:
       MainForm.Update;
       MainForm.Repaint;
       MainForm.Refresh;

mit in der Schleife und nicht einmal am Ende?

cu
Narses
mexx Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Do 19.01.06 14:44 
Auwei, ich hatte eigens versucht einen Splashscreen einzubinden, der mir das fast eine Minute lange warten grafisch darstellt. Um eine optische Anzeige, ausser ProgressBar, zu haben, habe ich das Eintragen der Daten sehen wollen. Dafür war das Update. Da die Zeilen auch noch farbig gemacht werden das Repaint und das Refresh hilt ich für notwendig. Die Sache ist die, dass die Anwendung beim Start ALLE daten holt und beim Auswählen eines einzelnen im ListView eben den ausgewählten Datensatz aktualisiert.