Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  E3.series
  Attribute schneller setzen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Attribute schneller setzen (1364 mal gelesen)
stug
Mitglied



Sehen Sie sich das Profil von stug an!   Senden Sie eine Private Message an stug  Schreiben Sie einen Gästebucheintrag für stug

Beiträge: 13
Registriert: 05.04.2011

CPU: Intel i5 2,7GHz
RAM: 3GB
OS : Windows XP SP3 (32 Bit)
E3 : 2012-1121 über Citrix
MSO: 2003-2010
VBS: VbsEdit
VBA: MSO.VBE
VB : VisualStudio 2010

erstellt am: 29. Jan. 2014 08:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi,

Ich habe das Problem das ich bei unseren Projekten an fast allen Pins 2 Attribute zusätzlich anbringen muss und komme dabei in ein Zeit problem.

Das setzen eines Attributs dauert ca 2 sek was bei über 200000 Pins eine ewigkeit ist.

Gibt es eine möglichkeit das setzen zu beschleunigen in dem ich zum beispiel alle Pin IDs vorher sammle und E3 dann das ganze Array mit IDs übergebe anstelle jede einzeln abzuarbeiten?

Als Beispiel hab ich hier mal nen Pseudocode der für ein Projekt ca 5 Stunden braucht.

*Pseudo code:*
for each device
  for each pin
    if not Pin.isterminal then pin.SetAttributValue("Blablubb","123")
  next
next
*Ende Code*

Die Ziel-Zeit liegt bei max 30 min besser wären 5 min oder weniger.

mfg Stug

------------------
Komm auf die dunkle Seite der Macht, wir haben Kekse!!!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

K0NFUZIUS
Moderator



Sehen Sie sich das Profil von K0NFUZIUS an!   Senden Sie eine Private Message an K0NFUZIUS  Schreiben Sie einen Gästebucheintrag für K0NFUZIUS

Beiträge: 258
Registriert: 06.02.2006

erstellt am: 29. Jan. 2014 12:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stug 10 Unities + Antwort hilfreich

Hi Stug,

wenn ich Dich richtig verstehe versuchst Du die Attribute schon über das COM Interface zu setzen und das dauert Dir immer noch zu lange.

Es gibt leider keine einheitliche Routine der Du alle Ids vorwerfen kannst.

Versuche einmal das Skript intern in's E³ einzubinden - das bringt häufig noch mal einen Performanceschub.

Dazu Öffnest Du unter dem Menü Extras -> Anpassen -> Werkzeuge
und wählst Dein Skript aus.

Führe das Skript jetzt über den Befehl im E3 aus. Ich kann Dir leider nicht sagen ob das viel bringt, aber es kommt auf einen Versuch drauf an.
BTW. wenn Du etwas am Skript änderst musst Du E3 Neustarten...

Gruß Jörg

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stug
Mitglied



Sehen Sie sich das Profil von stug an!   Senden Sie eine Private Message an stug  Schreiben Sie einen Gästebucheintrag für stug

Beiträge: 13
Registriert: 05.04.2011

CPU: Intel i5 2,7GHz
RAM: 3GB
OS : Windows XP SP3 (32 Bit)
E3 : 2012-1121 über Citrix
MSO: 2003-2010
VBS: VbsEdit
VBA: MSO.VBE
VB : VisualStudio 2010

erstellt am: 29. Jan. 2014 13:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Jörg,

Das mit dem Intern einbinden hab ich schon versucht...
Bringt aber leider auch nicht genug (ca 10 min). 

Die Scripte lass ich während der Entwicklung meistens im Excel-VBE laufen (bessere Debug Möglichkeiten  ) und portiere sie erst gegen Ende in eine VBS die dann in E3-eingebunden wird. Leider ist nur selten ein nennenswerter Zeitvorteil zwischen VBA und der eingebundenen VBS festzustellen...   

Gibt es vielleicht irgendwelche Prüf-mechanismen von E3 die man für das Setzen der Attribute umgehen/ausschalten könnte? 
(Bei Excel kann man zb die Bild aktualisierung, Formelberechnung und Eventverarbeitung abschalten was manchmal ordentlich Zeit rausholt.)

Zur Not könnte man noch versuchen die Projekt-Datei auch ohne E3 zu bearbeiten und die Attribute direkt in die Datei eintragen. 
Gibt es da irgendwo Hinweise wie die e3s Dateien aufgebaut sind und wie man so etwas macht?

mfg Stug

------------------
Komm auf die dunkle Seite der Macht, wir haben Kekse!!!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

K0NFUZIUS
Moderator



Sehen Sie sich das Profil von K0NFUZIUS an!   Senden Sie eine Private Message an K0NFUZIUS  Schreiben Sie einen Gästebucheintrag für K0NFUZIUS

Beiträge: 258
Registriert: 06.02.2006

erstellt am: 29. Jan. 2014 14:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stug 10 Unities + Antwort hilfreich

Hello again,

die e3s bearbeiten geht nicht, da das eine Binary Datei ist. Das einzige was man bearbeiten könnte, wäre die e3d Datei. Das würde ich aber nicht empfehlen, da machste mehr kaputt (gibt's auch keine Doku dazu),

Wäre es eigentlich vielleicht auch möglich wenn Du das zu addierende Attribut im DBE als 'Muss vorhanden sein' kennzeichnest und dann die Konfiguration im Projekt aktualisierst. Ohne es ausprobiert zu haben müsste das Attribut dann an allen Pins angelegt werden. Dabei kannst Du auch einen Standardwert angeben.

Weitere Idee:
Falls Du Ansichten von Betriebsmitteln in Deiner Liste hast, kannst Du die noch rausfiltern (IsView() ) da die Attribute eh nur an der Originalansicht hängen können.

Gruß Jörg

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

K0NFUZIUS
Moderator



Sehen Sie sich das Profil von K0NFUZIUS an!   Senden Sie eine Private Message an K0NFUZIUS  Schreiben Sie einen Gästebucheintrag für K0NFUZIUS

Beiträge: 258
Registriert: 06.02.2006

erstellt am: 29. Jan. 2014 15:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stug 10 Unities + Antwort hilfreich

Kleiner Zusatz:
Wenn es eine Option wäre das auch interaktiv zu machen, dann kann ich Dir noch die Anschlusspunkttabelle empfehlen, da kannst Du Excel like alle Attribute hinzufügen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stug
Mitglied



Sehen Sie sich das Profil von stug an!   Senden Sie eine Private Message an stug  Schreiben Sie einen Gästebucheintrag für stug

Beiträge: 13
Registriert: 05.04.2011

CPU: Intel i5 2,7GHz
RAM: 3GB
OS : Windows XP SP3 (32 Bit)
E3 : 2012-1121 über Citrix
MSO: 2003-2010
VBS: VbsEdit
VBA: MSO.VBE
VB : VisualStudio 2010

erstellt am: 29. Jan. 2014 15:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

ich schon wieder  

erstmal danke für deine Vorschläge...

Das mit den IsView hab ich gleich mal eingebaut,
wird aber vermutlich nicht viel bringen (kommt nicht so oft vor).

Der Tipp mit den DBE ist auch nicht schlecht, jedoch hier nicht Anwendbar (kommt aber in meine Trickkiste für später   ) da die Werte sich je nach Situation ändern und auch nicht überall drann müssen sondern nur an bestimmte Pins.

Und das mit den e3d File muss ich mir mal anschauen wenn ich viel Zeit und Muse hab...

'Nachtrag:
Das mit der Anschlusspunkttabelle werd ich nochmal probieren,
Optionen gibts in diesen Projekt noch nicht...

mfg Stug


------------------
Komm auf die dunkle Seite der Macht, wir haben Kekse!!!

[Diese Nachricht wurde von stug am 29. Jan. 2014 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

K0NFUZIUS
Moderator



Sehen Sie sich das Profil von K0NFUZIUS an!   Senden Sie eine Private Message an K0NFUZIUS  Schreiben Sie einen Gästebucheintrag für K0NFUZIUS

Beiträge: 258
Registriert: 06.02.2006

erstellt am: 29. Jan. 2014 15:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stug 10 Unities + Antwort hilfreich

Mit Option meinte ich nicht eine E3 Option ;-)

Ich meinte wenn eine interaktive Änderung infrage kommen würde, dann wäre die Anschlusspunkttabelle eine gute Möglichkeit viele Attribute an mehreren Anschlusspunkten schnell zu ändern 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 30. Jan. 2014 21:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stug 10 Unities + Antwort hilfreich

Hallo,

ich programmiere aktuell einiges für E3. Ich programmiere hierbei mit .Net und greife von außen auf die Applikationen zu. Das was du da machen möchtest, würde ich im groben auch über die DevIds und dann die Pins machen. Die Performance hierbei finde ich schon echt überragend für eine COM-Schnittstelle. Allerdings muss deine Verarbeitung auch entsprechend sein und man kann sicherlich immer wieder Dinge ausschließen z.B. in dem du dir nur die ConnectorIds ausgeben lässt. Ebenfalls entscheidend ist deine rohe Rechenleistung, da die gesamte Verarbeitung auf deinem Rechner stattfindet. Also auch hier ist sicherlich Verbesserungspotential. Wichtig hierbei ist es, Recourcen auch weider frei zu geben, da beim zulaufen des RAM sicherlich die Verarbeitung drastisch gebremmst wird.

Um hierbei aber wirklich etwas beurteilen oder verbessern zu können, bräuchte man schon den verwendeten Code. Bin leider erst wieder am Montag im Büro und habe daher keine Spielwiese zum ausprobieren bzw. um dir direkt bissl Beispielcode zu tippern.

Im Detail wäre aber auch die direkte Anforderung wichtig, da nur so wirklich ein Ablauf definiert werden kann. Vll. sagst du einfach mal im Detail, was du machen möchtest...

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stug
Mitglied



Sehen Sie sich das Profil von stug an!   Senden Sie eine Private Message an stug  Schreiben Sie einen Gästebucheintrag für stug

Beiträge: 13
Registriert: 05.04.2011

CPU: Intel i5 2,7GHz
RAM: 3GB
OS : Windows XP SP3 (32 Bit)
E3 : 2012-1121 über Citrix
MSO: 2003-2010
VBS: VbsEdit
VBA: MSO.VBE
VB : VisualStudio 2010

erstellt am: 24. Jul. 2014 11:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi, 
Sorry das ich dir erst jetzt Antworte. 
Aber ich benötigte die Infos für Arbeit und muss dort Scripte von anderen Leuten bearbeiten  und habe leider nicht die Rechte diese Scripte zu veröffentlichen (deshalb meistens Pseudo-code und Grundsatzdiskussionen von mir   )

Habe jetzt etwas mit VB.net experimentiert und musste feststellen das es langsamer ist als vbs das aus E3 läuft.

Hier ein Beispiel der Laufzeiten von einem Kabellisten export nach Excel:
  E3.VBS =  1,01 min (VBS wird über E3 gestartet.)
  VB.exe =  4,38 min (compilierte VB exe wurde aus dem Explorer gestartet)
Win.VBS = 10,48 min (VBS wurde von außen gestartet)

Der umstieg auf VB ist auch etwas holprig verlaufen so gibts kein "Set" mehr und die CreateObject("scripting.dictionary") die es jetzt direkt in vb gibt (also ohne CreateObject) sind auch komplett anders(zb dict.exists() heisst hier Dict.ContainsKey()). die Textfunktionen Left und Right kennt er nicht mehr (:heul  dann kennt er kein Variant mehr und bei "option strict" hört der spass dann ganz auf...
Woher soll ich denn wissen welche Datentypen alles in das Dictionary sollen und was mach ich wenn ich zwei unterschiedliche Datentypen brauch (zb: String und Dictionary)

Viele kleine Stolpersteine die meistens ein komplettes umschreiben des Bestehenden Scriptes erfordern wenn man es richtig machen will und welches dann auch noch langsamer läuft.  

Momentan kann ich in der verwendung einer "echten Programmiersprache" keine vorteile erkennen.

hab hier noch einen stark gekürzten pseudo quelltext des Scripts womit ich die Zeiten ermittelt hab:

Code:
Option Explicit
'E3-Variables
'""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Dim App:                        Set App = ConnectToE3 'Dispatcher
Dim Prj:                        Set Prj = App.CreateJobObject
Dim Dev:                        Set Dev = Prj.CreateDeviceObject
...

'andere Variablen
'""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Dim WireTypes:                  Set WireTypes = CreateObject("Scripting.Dictionary")
Dim Cables:                     Set Cables = CreateObject("Scripting.Dictionary")
Dim Cores:                      Set Cores = CreateObject("Scripting.Dictionary")
Dim Cable:                      'auch dictionary
Dim Core:                       'auch dictionary
...

'Vorbereitungen
'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
' Checke ob Projekt offen
' Checke alle Seiten aus
' Checke ob Excel Vorlage da

'Daten ermitteln
'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
devcnt = Prj.GetCableIds(devids)' ermittele alle Kabel und Einzeladern DevCnt liegt bei ca 1000
row = 0 'zähler zum zählen der benötigten Zeilen
For D = 1 To DevCnt
    Dev.SetId DevIDs(D)
    If Dev.IsWireGroup Or Dev.IsCable Then
        Set Cable = CreateObject("scripting.dictionary")
        Row = Row + 1
        Cable.Add "Cores", CreateObject("scripting.dictionary")
'Kabel
        Cable("ID") = DevIDs(D)
        Cable("GID") = Prj.GetGidOfId(DevIDs(D))
        Cable("IsCable") = Dev.IsCable
        Cable("Location") = Dev.GetLocation
        Cable("Assignment") = Dev.GetAssignment
        Cable("Name") = Dev.GetName
        '... Es folgen ca 20 weitere Eigenschaften die ausgelesen werden
'Adern allgemein
        PinCnt = Dev.GetPinIds(PinIDs) '(meist einstellig bei Einzeladern sind es hier dann knapp 10000)
        For P = 1 To UBound(PinIDs)
            Set Core = CreateObject("scripting.dictionary")
            Pin.SetId PinIDs(P)
            Row = Row + 1
           
            Core("ID") = PinIDs(P)
            Core("GID") = Prj.GetGidOfId(PinIDs(P))
            Core("Signal") = Pin.GetSignalName
            'es folgen ca 50 Zeilen für weitere Eigenschaften und Attribute
            '(Farbe, Typ, angeschlossene Geräte und deren Eigenschaften etc)
'Einzeladern
            If Dev.IsWireGroup Then               
                'hier werden die Daten ermittelt die bei Einzeladern anders ausgelesen werden
                Core("Typ") = ....               
            End If
            Cable("Cores").Add Core("ID"), Core     'Adern zum Kabel hinzufügen
            Set Core = Nothing           
        Next 'PinIDs(p) = Ader
        Cables.Add DevIDs(D), Cable                 'Kabel zu Gesamtliste hinzufügen
        Set Cable = Nothing
        Row = Row + 1
    End If  'is cabel or wiregroup
Next 'DeviceIDs = Kabel

Set Prj = Nothing 'verbindung zum Projekt beenden... App bleibt aber für Status-ausgaben
Set Att = Nothing
Set Dev = Nothing
...

'Ausgabe nach Excel
'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
App.PutMessage Now & vbTab & "Export to Excel..."

'Ausgabe Zeilenweise da sonst zuviel für Excel API...

ReDim Output_Arr(0, Column-1)
Set Exl_Rng = Exl_WS.cells(4,2).resize(Row+1,Column+1)
Row = 0

'Daten Schreiben
For Each D In Cables.keys
    ' Kabel ausgeben
    Set Cable = Cables(D)
    If Cable("IsCable") Then
        N = 0
        Output_Arr(0,N) = "'" & Cable("Location"):                        N = N + 1
        Output_Arr(0,N) = "'" & Cable("Assignment"):                      N = N + 1
        Output_Arr(0,N) = "'" & Cable("Name"):                            N = N + 1
        Output_Arr(0,N) = "'":                                            N = N + 1
        Output_Arr(0,N) = "'":                                            N = N + 1
        Output_Arr(0,N) = "'" & Cable("ID"):                              N = N + 1
        'hier dann für alle 60 Spalten eine zeile

        Row = Row + 1
        Exl_Rng.cells(Row,1).resize(1,Column) = Output_Arr
    End If
    For Each P In Cable("Cores").keys
        Set Core = Cable("Cores")(P)
        If Cable("IsCable") Then    'Wenn Kabelader
            N = 0
            Output_Arr(0,N) = "'" & Cable("Location"):                      N = N + 1
            Output_Arr(0,N) = "'" & Cable("Assignment"):                    N = N + 1
            Output_Arr(0,N) = "'" & Cable("Name"):                          N = N + 1
            Output_Arr(0,N) = "'" & Core("Signal"):                         N = N + 1
            Output_Arr(0,N) = ""  & Core("LineIndex"):                      N = N + 1
            Output_Arr(0,N) = "'" & Core("ID"):                             N = N + 1
            'hier dann für alle 60 Spalten eine zeile
        Else    'Wenn Einzelader
            N = 0
            Output_Arr(0,N) = "'" :                                         N = N + 1
            Output_Arr(0,N) = "'" :                                         N = N + 1
            Output_Arr(0,N) = "'" :                                         N = N + 1
            Output_Arr(0,N) = "'" & Core("Signal"):                         N = N + 1
            Output_Arr(0,N) = ""  & Core("LineIndex"):                      N = N + 1
            Output_Arr(0,N) = "'" & Core("WireName"):                       N = N + 1
            Output_Arr(0,N) = "'" & Core("ID"):                             N = N + 1
            'hier dann für alle 60 Spalten eine zeile
        End If
        Row = Row + 1
        Exl_Rng.cells(Row,1).resize(1,Column) = Output_Arr
        Set Core = Nothing
    Next    'Core
Next    'Cable
Exl_WB.SaveAs (SAVE_PATH & E3_Prj_File)
Exl_App.Visible = 1   
Script_Exit 'Destructor der aufräumt und dann das script killt



wer Verbesserungsvorschläge hat immer her damit...

mfg stug


------------------
Komm auf die dunkle Seite der Macht, wir haben Kekse!!!

[Diese Nachricht wurde von stug am 24. Jul. 2014 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 24. Jul. 2014 13:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stug 10 Unities + Antwort hilfreich

Moin,
also erstmal es kommt darauf an, was man macht. Generell ist der reine Zugriff auf E3 durch das VBS schneller. Das hat einfach den Hintergrund, dass das VBS direkt im Kernel vom E3 läuft. E3 kompiliert das ganze auch, was insgesamt den Zugriff auf externe Objekte wieder langsamer macht. Man kann aber sehr viel optimieren. Ich pers. habe mit dem externen Zugriff absolut keine Probleme! Meine Programme sind wirklich rasend schnell. Allerdings weis ich nicht, wie komplex eure Projekte sind, denn mit mehreren hundert Blättern und tausenden Kabeln habe ich es noch nicht ausprobiert.

Zum Thema MultiThreading...
Das funktioniert leider nur für Datenanalysen, die nicht durch E3 ausgeführt werden, denn alles, was im E3 Kernel verarbeitet wird, ist auch davon abhängig. Soll meinen, wenn du mit einem Thread z.B. die Betriebsmittel ermitteln möchtest und mit dem anderen die Blätter, dann ermittelst du diese mit dem E3. Dieses kann allerdings nur einen Thread bedienen, was zur Folge hat, dass der andere warten muss.

Zum Thema VBS und VB.Net...
Die Migration ist nicht ganz trivial. Wichtig ist, dass die Variablen alle sauber deklariert werden. Was du mit Dictionary.exists meinst, ist mir ein Rätsel. BTW würde ich das ganze aber schon gerne im Thread weiter diskutieren, denn dann haben alle etwas davon. Es gibt einige Sachen, auf die du achten musst beim Zugriff. Wichtig ist vorallem, wie du auf E3 zugreift. Baust du jedesmal eine neue Verbindung auf, oder hältst du diese über die gesamte Verarbeitung etc...

Zu dem konkreten Scriptbeispiel...
Dieses Beispiel wirst du nicht ein zu eins übernehmen können. So aus dem VBS ins VB.Net und du hast massive Performanceeinbusen. Vor allem wichtig ist, dass die Variablen alle mit dem richtigen Objekt deklariert sind, denn sonst werden diese als "Object" bzw. "Variant" erstellt und zur Laufzeit "neu" mit dem übergebenen Objektmodell erzeugt. Dann verwendet man möglichst nicht die CreateObject-Methode, sondern verwendet den Kontext der importierten COM-Modelle, denn auch hier wird das Modell schon während der Kompilierung generiert und nicht erst zur Laufzeit.

Hier mal ein paar Ausschnitte von mir, die dir vll. zeigen, wie ich das meine.

Code:

    Public Function GetDevices_Selected() As Object

        '-------------------------------------------------------------------------------
        ' reads the selected devices
        '-------------------------------------------------------------------------------
        ' >>> Return Value <<<
        ' dicDivices >>> Dictionary (Key = Devices Name; Value = DeviceID)
        ' Nothing on Error
        '-------------------------------------------------------------------------------

        Dim E3Dev As e3.e3Device

        Dim dicDevices As New Dictionary(Of String, Integer)
        Dim sDevName As String
        Dim iDevIds() As Object
        Dim iDevId As Integer
        Dim i As Integer

        Try

            E3Dev = E3Prj.CreateDeviceObject

            E3Prj.GetSelectedAllDeviceIds(iDevIds)
            For i = 1 To UBound(iDevIds)
                iDevId = iDevIds(i)
                E3Dev.SetId(iDevId)
                sDevName = E3Dev.GetComponentName
                iDevId = E3Dev.GetId
                If Not dicDevices.ContainsKey(sDevName) And sDevName <> "" Then
                    dicDevices.Add(sDevName, iDevId)
                End If
            Next

            E3Dev = Nothing
            Return dicDevices

        Catch ex As Exception

            E3Dev = Nothing
            MsgBox(ex.ToString, MsgBoxStyle.Critical, "Fehler in Functions: GetDevices_Selected")
            Return Nothing

        End Try

    End Function

    Public Function GetE3Components() As Boolean

        '-------------------------------------------------------------------------------
        ' gets the active session of E³Series
        '-------------------------------------------------------------------------------
        ' >>> Return Value <<<
        ' True  >>> Session connected
        ' False >>> an error occurs
        '-------------------------------------------------------------------------------

        Dim E3Dis As CT.Dispatcher
        Dim ActProc As Process
        Dim WindowsTitle As String

        Try

            E3App = CreateObject("CT.Application")

            If DebugMode = True Then
                E3Prj = E3App.CreateJobObject
            Else
                E3Dis = CreateObject("CT.Dispatcher")
                Application.DoEvents()
                ActProc = GetActiveAppProcess()

                WindowsTitle = ActProc.MainWindowTitle

                If InStr(WindowsTitle, "E³.cable") > 0 Then
                    E3App = E3Dis.GetE3ByProcessId(ActProc.Id)
                    Application.DoEvents()
                    E3Prj = E3App.CreateJobObject
                Else
                    MsgBox("Der E3-Prozess wurde nicht erkannt oder ist nicht aktiv.", MsgBoxStyle.Information)
                    E3Dis = Nothing
                    Return False
                End If

                E3Dis = Nothing
            End If

            Return True

        Catch ex As Exception

            E3Prj = Nothing
            E3Dis = Nothing
            E3App = Nothing
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler in Functions: GetE3Components")
            Return False

        End Try
    End Function


    Public Function ReleaseE3Components() As Boolean

        '-------------------------------------------------------------------------------
        ' releases the active session of E³Series
        '-------------------------------------------------------------------------------
        ' >>> Return Value <<<
        ' True  >>> gets a session
        ' False >>> an error occurs
        '-------------------------------------------------------------------------------

        Try

            E3Prj = Nothing
            E3App = Nothing
            Return True

        Catch ex As Exception

            MsgBox(ex.ToString, MsgBoxStyle.Critical, "Fehler in Functions: ReleaseE3Components")
            Return False

        End Try

    End Function

    Public Function GetActiveAppProcess() As Process

        '-------------------------------------------------------------------------------
        ' Getting handle of foreground window (the active application)
        ' and returning it to activeProcessHandle
        '-------------------------------------------------------------------------------

        Dim activeProcessID As IntPtr

        Try

            GetWindowThreadProcessId(GetForegroundWindow(), activeProcessID)
            Return Process.GetProcessById(activeProcessID)

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler in Functions: GetActiveAppProcess")
            Return Nothing

        End Try

    End Function



------------------
MFG
Rick Schulz

Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stug
Mitglied



Sehen Sie sich das Profil von stug an!   Senden Sie eine Private Message an stug  Schreiben Sie einen Gästebucheintrag für stug

Beiträge: 13
Registriert: 05.04.2011

CPU: Intel i5 2,7GHz
RAM: 3GB
OS : Windows XP SP3 (32 Bit)
E3 : 2012-1121 über Citrix
MSO: 2003-2010
VBS: VbsEdit
VBA: MSO.VBE
VB : VisualStudio 2010

erstellt am: 24. Jul. 2014 14:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

hmm nach deinen Beispiel stellen sich mir ein paar fragen:

1. warum hollst du dir die Prozessid des Aktiven Fensters? sollte das nicht das VB Programm sein? 

2. wie bastel ich mir variable Dictionary konstructe wie bei meinen beispiel? (dic = Dictionary; Prop = Eigenschaft)

Code:
Cables()                            = Dic mit allen Kabeln
Cables(KabelID)                            = Dic mit allen Props des Kabel
Cables(KabelID)("GID")                    = String Wert der Prop "GID"
Cables(KabelID)("Cores")                  = Dic mit allen Adern des Kabels
Cables(KabelID)("Cores")(CoreID)          = Dic mit den Propertys der Ader
Cables(KabelID)("Cores")(CoreID)("Signal") = String Wert des Signal der Ader

3. Ok die Kern aussage hab ich glaub ich verstanden (Createobject & LateBindings = Böse  ) werd mal etwas mehr rumexperimentieren und schauen ob es besser wird weil 4 min sind einfach zu lange...
allerdings selbst wenn die Objekte erst zur laufzeit erstellt werden dürfte das doch nur einen kleinen performance schub beim starten der anwendung geben oder?

------------------
Komm auf die dunkle Seite der Macht, wir haben Kekse!!!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 24. Jul. 2014 15:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stug 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von stug:
1. warum hollst du dir die Prozessid des Aktiven Fensters? sollte das nicht das VB Programm sein?  


Weil das Programm aus dem E3 heraus gestartet wird und dafür entsprechend dieses E3 "gefangen" werden soll. Sobald du 2 E3-Sessions offen hast, ist nämlich nicht mehr klar, welches "gefangen" werden soll. So schon ;)

Zitat:
Original erstellt von stug:
2. wie bastel ich mir variable Dictionary konstructe wie bei meinen beispiel? (dic = Dictionary; Prop = Eigenschaft)
Code:
Cables()                             = Dic mit allen Kabeln
Cables(KabelID)                            = Dic mit allen Props des Kabel
Cables(KabelID)("GID")                     = String Wert der Prop "GID"
Cables(KabelID)("Cores")                   = Dic mit allen Adern des Kabels
Cables(KabelID)("Cores")(CoreID)           = Dic mit den Propertys der Ader
Cables(KabelID)("Cores")(CoreID)("Signal") = String Wert des Signal der Ader



In diesem Fall würde ich es wie folgt machen.
Code:

                Dim dicCables As New Dictionary(Of String, Dictionary(Of String, String))
                Dim dicCable As New Dictionary(Of String, String)

                dicCable.Add("Name", "Value")
                dicCable.Add("Name2", "Value")
                dicCable.Add("Name3", "Value")
                dicCable.Add("Name4", "Value")
                dicCable.Add("Name5", "Value")
                dicCables.Add("KabelId", dicCable)


Zitat:
Original erstellt von stug:
3. Ok die Kern aussage hab ich glaub ich verstanden (Createobject & LateBindings = Böse   ) werd mal etwas mehr rumexperimentieren und schauen ob es besser wird weil 4 min sind einfach zu lange...
allerdings selbst wenn die Objekte erst zur laufzeit erstellt werden dürfte das doch nur einen kleinen performance schub beim starten der anwendung geben oder?


Naja du erstellst bei deinem Ablauf schon schnell mehrere Zehntausend, wenn nicht sogar hundertausende oder Millionen, Objekte. Da machen auch Millisekunden etwas aus.

Zum Thema Latebinding vermeiden bzw. auch generell für die Lesbarkeit, dass du derartige Dinge in Unterfunktionen packen solltest.

z.B. so...

Code:

        For D = 1 To DevCnt
            Dev.SetId(DevIDs(D))
            If Dev.IsWireGroup Or Dev.IsCable Then
                Cable = GetCableInformation(Dev)
                PinCnt = Dev.GetPinIds(PinIDs)  '(meist einstellig bei Einzeladern sind es hier dann knapp 10000)
                For P = 1 To UBound(PinIDs)
                    Core = GetPinInformation(PinIDs(P))
                    'es folgen ca 50 Zeilen für weitere Eigenschaften und Attribute
                    '(Farbe, Typ, angeschlossene Geräte und deren Eigenschaften etc)
                    'Einzeladern
                    If Dev.IsWireGroup Then
                        'hier werden die Daten ermittelt die bei Einzeladern anders ausgelesen werden
                Core("Typ") = ....               
                    End If
                    Cable("Cores").Add(Core("ID"), Core)    'Adern zum Kabel hinzufügen
                    Core = Nothing
                Next 'PinIDs(p) = Ader
                Cables.Add(DevIDs(D), Cable)                'Kabel zu Gesamtliste hinzufügen
                Cable = Nothing
                Row = Row + 1
            End If  'is cabel or wiregroup
        Next 'DeviceIDs = Kabel


    Public Function GetCableInformation(ByVal Device As e3Device) As Object

        Dim dicCable As New Dictionary(Of String, String)
        Dim strDevId As String

        'Kabel
        strDevId = Device.GetId
        dicCable("ID") = strDevId
        dicCable("GID") = E3Prj.GetGidOfId(strDevId)
        dicCable("IsCable") = Device.IsCable
        dicCable("Location") = Device.GetLocation
        dicCable("Assignment") = Device.GetAssignment
        dicCable("Name") = Device.GetName

        Return dicCable

    End Function

    Public Function GetPinInformation(ByVal PinID As Integer) As Object

        Dim E3Pin As e3Pin
        Dim dicCore As New Dictionary(Of String, String)

        E3Pin = E3Prj.CreatePinObject

        E3Pin.SetId(PinID)

        dicCore("ID") = PinID
        dicCore("GID") = E3Pin.GetGidOfId(PinID)
        dicCore("Signal") = E3Pin.GetSignalName

        Return dicCore

    End Function


Ich habe deinen Code auf die schnelle etwas umgeschrieben. Natürlich ungetestet und nicht funktionstüchtig, da du ja auch Dinge entfernt hattest. Aber ich denke das sollte veranschaulichen, wie es gehen könnte bzw. besser wäre.

HTH

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stug
Mitglied



Sehen Sie sich das Profil von stug an!   Senden Sie eine Private Message an stug  Schreiben Sie einen Gästebucheintrag für stug

Beiträge: 13
Registriert: 05.04.2011

CPU: Intel i5 2,7GHz
RAM: 3GB
OS : Windows XP SP3 (32 Bit)
E3 : 2012-1121 über Citrix
MSO: 2003-2010
VBS: VbsEdit
VBA: MSO.VBE
VB : VisualStudio 2010

erstellt am: 24. Jul. 2014 15:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hmm ja,
Das mit den Functions hatte ich auch in der Überlegung hab es aber wieder verworfen weil dann entweder die ganzen verwendeten E3 objekte auserhalb der sub sein oder mit übergeben werden müssten. Folgender code geht deshalb nicht:
Code:
    Sub Wirelist
        Dim E3Prj as e3job
        Cable = GetCableInformation(Dev)
    end sub

    Function GetCableInformation(ByVal Device As e3Device) As Object
        dicCable("GID") = E3Prj.GetGidOfId(strDevId)
        dicCable("IsCable") = Device.IsCable
    End Function



Die Funktion kennt das E3Prj an der Stelle ja garnicht weil die Variable nur innerhalb der Sub Wirelist gültig ist oder?
Das Problem macht sich dann bemerkbar wenn es nicht bei 2 Objekten bleibt sondern auch noch Sheets, Structurnodes, Components usw dazu kommen die alle irgendwelche informationen bereithalten... da wird der funktionsaufruf ja ewig lang.

um nochmal auf Frage 2 zurück zu kommen:

Zitat:
Code:
Cables(KabelID)("GID")                    = String Wert der Prop "GID"
Cables(KabelID)("Cores")                  = Dic mit allen Adern des Kabels

Wie realisiere ich das? ich brauch da als Wert einmal ein weiteres Dictionary für die Adern aber auch ein String für die Eigenschaften...

Ich spiel da schon mit den gedanken dafür eigene Klassen anzulegen... aber hab das noch nich gemacht und wenn ich die KristallGoogel richtig interpretiert habe dann brauch ich da für jeden Wert ein Set und ein Get und hab ein riesigen aufwand allein um die Klasse zu erstellen, und das brauch ich dann für EinzelAdern, Kabeladern und Kabel. und wenn mans ganz genau nimmt brauch ichs dann auch für die an den Adern angeschlossenen Geräte ne Klasse für deren Pins usw... da schreib ich mir doch dann halb e3 in VB nach 

mfg stug

------------------
Komm auf die dunkle Seite der Macht, wir haben Kekse!!!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 24. Jul. 2014 16:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stug 10 Unities + Antwort hilfreich

Also erstens E3Prj und E3App würde ich bzw. habe ich global deklariert und fange diese mit dem Start des Makros/Programmes und zweitens würde ich eigentlich nie alles in eine Function packen. Ich habe Programme mit mehreren tausend Zeilen Code, wie soll man das denn noch lesen können? Außerdem hast du zig Sachen doppelt bzw. die du immer wieder brauchst. Das ist äußerst unpraktisch... Durch die Unterfunktionen habe ich nicht nur Fehler innerhalb kürzester Zeit gefunden, sondern auch Erweiterungen quasy mit einem Schnipps implementiert

Du kannst doch für die Cores ein eigenes Dictionary machen, welches eben bezogen auf die KabelID ein dictionary mit den Pins im Bauch hat. Alles andere bzw. Dictionary mit Variant ist äußerst unperformant und extrem datenlastig. BTW kannst du auch diese global deklarieren. Das mach ich bei Listen, die ich immer wieder brauche, bzw. wenn ich es als sinnvoll erachte eigentlich immer. Vorallem bei Dingen, die auf Datenbanken zugreifen. Einmal die Liste auslesen und zur gesamten Laufzeit zur Verfügung haben.

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stug
Mitglied



Sehen Sie sich das Profil von stug an!   Senden Sie eine Private Message an stug  Schreiben Sie einen Gästebucheintrag für stug

Beiträge: 13
Registriert: 05.04.2011

CPU: Intel i5 2,7GHz
RAM: 3GB
OS : Windows XP SP3 (32 Bit)
E3 : 2012-1121 über Citrix
MSO: 2003-2010
VBS: VbsEdit
VBA: MSO.VBE
VB : VisualStudio 2010

erstellt am: 24. Jul. 2014 18:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

So ähnlich war das hier auch gedacht  , einmal aus e3 alles auslesen und dann die verschiedenen Reports erzeugen allerdings musste es mittendrinn plötzlich schnell gehen und nun haben wir 7 Scripte wo die ersten 700 Zeilen bis zur excel ausgabe gleich sind (...waren  )

Das mit den Cores hatte ich auch schonmal überlegt, wollte aber damals alles als ein Verweis übergeben können quasi als ein Paket...
wenn die Adern von den Kabeln getrennt wären geht mir ja quasi die Denk-struktur dahinter flöten.

Aber werds mal versuchen ist ja recht schnell umgeschrieben.

Das mit den Sub's ist sone Macke aus VBA... VBA kann nur inerhalb von Sub's und Functions normalen Code verwursten ansonsten meckert er rum...
Und ganz ehrlich ich arbeite momentan nur in einer UserForm der Code steht dort in einer Sub und wird erst beim klicken auf Button1 ausgeführt.

wenn ich den jetzt direkt in die form-klasse schreibe ... gibts auch in vb nen fehler (declaration expected) und ausserhalb der Klasse ... (Statement is not valid in a namespace) (*frisch getestet  ) also glaub ich das ich dich irgendwie missverstanden hab.

Allerdings fällt mir gerade auch kein Grund ein warum die ganzen E3Objekte nicht global sein sollten. genau wie die Cables und Cores auch.

Ich bastel noch ein bissel rum mal sehen ob es was bringt 

mfg stug

------------------
Komm auf die dunkle Seite der Macht, wir haben Kekse!!!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 24. Jul. 2014 19:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stug 10 Unities + Antwort hilfreich

Also die Unterobjekte würde ich nicht global setzen. Das führt zu Problemen, Vor allem bei rekursiven Aufrufen. Da du allerdings nur eine App hast und auch nur ein Projekt, kann man die getrost global setzen. Ich habe hierfür extra ein eigenes Modul für die Funktionen und ein Modul für globale Variablen. Globae Dinge also Funktionen und Ojekte musst du mit Public deklarieren. Also anstatt Dim Public verwenden. Die Syntax bleibt die gleiche.

In den Frames habe ich eigentlich wirklich nur den Code, der direkt auf die Elemente des Frame verweist. Alles andere habe ich in Funktionen. Ist sauber, gut lesbar und man findet alles schnell wieder. Letzteres ist fürs debugging und erweitern sehr gut. Wenn du ein einfaches Script hast, dann poste das mal, dann mach ich dir mal ein Beispiel. Einfach sollte es allerdings sein, da ich vieles wahrscheinlich mit meiner Umgebung garnicht testen kann, wenn ihr dafür das System angepasst habt. Außerdem kann ich da auch nicht zu viel Zeit für investieren... Aber in 5 Mins bekomme ich schon viel geschrieben 

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stug
Mitglied



Sehen Sie sich das Profil von stug an!   Senden Sie eine Private Message an stug  Schreiben Sie einen Gästebucheintrag für stug

Beiträge: 13
Registriert: 05.04.2011

CPU: Intel i5 2,7GHz
RAM: 3GB
OS : Windows XP SP3 (32 Bit)
E3 : 2012-1121 über Citrix
MSO: 2003-2010
VBS: VbsEdit
VBA: MSO.VBE
VB : VisualStudio 2010

erstellt am: 25. Jul. 2014 10:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

huhu,

So hatte gestern noch bis spät in die Nacht das Script grade gebogen
und der Zeitgewinn ist minimal. Er braucht immer noch 3,8 min...
Man kann nicht sagen das es garnix bringt aber VBS ist immer noch 3 mal so schnell.
Ich denke VB lohnt sich nur wenn man viel mehr möchte
als Daten von E3 nach Excel zu schaufeln (VB ist quasi überqualifiziert  )

Das Problem ist jetzt, das die Woche rum ist, ich Ergebnisse präsentieren muss und außer das der Code für Dritte nicht mehr ohne weiteres einsehbar ist, seh ich keine Vorteile in VB.

Ich hab mir auch mal die mühe gemacht und die Zeiten der Befehle getrackt  und ich denke mal das die verzögerungen zu rund 90% an der API liegen.

Ich danke euch für die Hilfe... 

mfg Stug

------------------
Komm auf die dunkle Seite der Macht, wir haben Kekse!!!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz