| | |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | |  | PNY wird von NVIDIA zum Händler des Jahres gewählt - zum dritten Mal in Folge, eine Pressemitteilung
|
|
Autor
|
Thema: Apprentice Zugriff sehr langsam bei INV 9 (834 mal gelesen)
|
basti19 Mitglied

 Beiträge: 26 Registriert: 23.07.2003 Software: AIP2011 SP2 x64
|
erstellt am: 10. Dez. 2004 10:15 <-- editieren / zitieren --> Unities abgeben:         
Hi Leute, ich habe ein sehr lästiges Problem. Ich versuche über den Apprentice auf eine Baugruppe zuzugreifen und rekursiv zu kontrollieren, ob alle Dateien vorhanden sind. Die Routine funktioniert sehr gut, es gibt allerdings mit besagter Baugruppe das Problem, das jeder Zugriff auf ein Property etwa 3 Minuten dauert, also 3 min für die Anzahl der referenzierten Dateien, 3 min für den Zugriff auf die erste ref. Datei, ... Da in dieser Datei 150 Referenzen vorhanden sind, kann man sich ausrechnen, daß das ganze 7,5 Stunden dauern wird... Öffne ich die gleiche Datei mit dem Design Assistent (meines Wissens nach die gleiche Schnittstelle) auf dem gleichen Rechner erhalte ich innerhalb von etwa 5 Sekunden die korrekte Liste... Kennt irgendwer das Problem? tia Sebastian [Diese Nachricht wurde von basti19 am 10. Dez. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Ehrenmitglied V.I.P. h.c. Softwareentwickler

 Beiträge: 3497 Registriert: 01.08.2002 Alienware m17x, Win7, Inventor2012
|
erstellt am: 10. Dez. 2004 11:05 <-- editieren / zitieren --> Unities abgeben:          Nur für basti19
Hi, ja DA benutzt ebenfalls Apprentice. Also, wenn DA funktioniert und dein Code über Appreintice nicht ( 3 min. pro Property ), dann wird es wohl an den Code liegen. Was liest du aus ? FullFileName ? Wie prüfst du ob die Datei vorhanden ist ? Mit FileSystemObject ? ------------------ Grüße daywa1k3r Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
basti19 Mitglied

 Beiträge: 26 Registriert: 23.07.2003 Software: AIP2011 SP2 x64
|
erstellt am: 10. Dez. 2004 11:11 <-- editieren / zitieren --> Unities abgeben:         
Hi daywalker, nachfolgend die Funktion. Ich übergebe ein ApprenticeServerDocument und gehe einfach die Liste der ReferencedFileDescriptors durch, prüfe auf DocumentFound und schreibe den Dateinamen in ein Dictionary da ich einen ganzen Stapel von Dateien abarbeite und mit dem gewählten Ansatz sonst permanent doppelt und dreifach checken würde (daher die Abfrage des Dictionaries am Anfang). Die Wartezeit tritt bei JEDEM Zugriff auf (Variablenzuweisung für die Anzahl, für das nächste Objekt, ...) Private Function CheckReferences(oDoc As Inventor.ApprenticeServerDocument, oDr As IAMDocumentRepository10, Log As FILE_REPORT) As Boolean Dim oRefDesc As Inventor.ReferencedFileDescriptor Dim i As Long dim lngCount as long On Error GoTo CheckReferences_Error CheckReferences = True If oDoc Is Nothing Then Exit Function End If Err.Clear DoEvents If dictFiles.Exists(oDoc.FullFileName) Then CheckReferences = CBool(dictFiles(oDoc.FullFileName)) Exit Function End If lngCount=oDoc.ReferencedFileDescriptors.Count For i = 1 To lngCount Set oRefDesc = oDoc.ReferencedFileDescriptors(i) Debug.Print oDoc.FullFileName, oRefDesc.FullFileName If Not oRefDesc.DocumentFound Then CheckReferences = False Log.Action = "Missing" Log.Error = True Log.WriteLog Mid$(oRefDesc.FullFileName, InStrRev(oRefDesc.FullFileName, "\") + 1) & ": Nicht vorhanden" Set oRefDesc = Nothing Exit For Else If Not CheckReferences(oRefDesc.ReferencedDocument, oDr, Log) Then CheckReferences = False Log.Action = "Missing" Log.Error = True Log.WriteLog Mid$(oRefDesc.FullFileName, InStrRev(oRefDesc.FullFileName, "\") + 1) & ": Nicht vorhanden" Set oRefDesc = Nothing Exit For End If End If Set oRefDesc = Nothing Next i dictFiles.Item(oDoc.FullFileName) = CStr(CheckReferences) DoEvents frmMain.Refresh On Error GoTo 0 Exit Function CheckReferences_Error: CheckReferences = False Log.Error = True Log.Action = "CheckReferences" Log.WriteLog Err.Description & "(" & oDoc.FullFileName & ", " & oRefDesc.FullFileName & ")" End Function
[Diese Nachricht wurde von basti19 am 10. Dez. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
basti19 Mitglied

 Beiträge: 26 Registriert: 23.07.2003 Software: AIP2011 SP2 x64
|
erstellt am: 21. Dez. 2004 12:28 <-- editieren / zitieren --> Unities abgeben:         
Hi Leute, ich habe das Problem gelöst, allerdings mit einer sehr eigenartigen Lösung. Der Zugriff funktioniert jetzt wie erwartet. Die fertige Funktion sieht jetzt so aus (Änderungen habe ich markiert): Code:
Private Function CheckReferences(oDoc As Inventor.ApprenticeServerDocument, oDr As IAMDocumentRepository10, Log As FILE_REPORT) As Boolean Dim oRefDesc As Inventor.ReferencedFileDescriptor Dim i As Long dim lngCount as long On Error GoTo CheckReferences_Error CheckReferences = True If oDoc Is Nothing Then Exit Function End If Err.Clear DoEvents If dictFiles.Exists(oDoc.FullFileName) Then CheckReferences = CBool(dictFiles(oDoc.FullFileName)) Exit Function End If ' **************************** ' Achtung, Änderung!! ' **************************** If oDoc.HealthStatus <> kUpToDateHealth Then End If
lngCount=oDoc.ReferencedFileDescriptors.Count For i = 1 To lngCount Set oRefDesc = oDoc.ReferencedFileDescriptors(i) Debug.Print oDoc.FullFileName, oRefDesc.FullFileName If Not oRefDesc.DocumentFound Then CheckReferences = False Log.Action = "Missing" Log.Error = True Log.WriteLog Mid$(oRefDesc.FullFileName, InStrRev(oRefDesc.FullFileName, "\") + 1) & ": Nicht vorhanden" Set oRefDesc = Nothing Exit For Else If Not CheckReferences(oRefDesc.ReferencedDocument, oDr, Log) Then CheckReferences = False Log.Action = "Missing" Log.Error = True Log.WriteLog Mid$(oRefDesc.FullFileName, InStrRev(oRefDesc.FullFileName, "\") + 1) & ": Nicht vorhanden" Set oRefDesc = Nothing Exit For End If End If Set oRefDesc = Nothing Next i dictFiles.Item(oDoc.FullFileName) = CStr(CheckReferences) DoEvents frmMain.Refresh On Error GoTo 0 Exit Function CheckReferences_Error: CheckReferences = False Log.Error = True Log.Action = "CheckReferences" Log.WriteLog Err.Description & "(" & oDoc.FullFileName & ", " & oRefDesc.FullFileName & ")" End Function
Vielleicht kann mir jemand erklären, warum das so ist... CU & tia & HTH Sebastian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |