Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Apprentice Zugriff sehr langsam bei INV 9

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Apprentice Zugriff sehr langsam bei INV 9 (760 mal gelesen)
basti19
Mitglied



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

Beiträge: 26
Registriert: 23.07.2003

Software: AIP2011 SP2 x64

erstellt am: 10. Dez. 2004 10:15    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 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
Moderator
Softwareentwickler




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

Beiträge: 3497
Registriert: 01.08.2002

Alienware m17x, Win7, Inventor2012

erstellt am: 10. Dez. 2004 11: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 basti19 10 Unities + Antwort hilfreich

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



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

Beiträge: 26
Registriert: 23.07.2003

Software: AIP2011 SP2 x64

erstellt am: 10. Dez. 2004 11:11    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 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



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

Beiträge: 26
Registriert: 23.07.2003

Software: AIP2011 SP2 x64

erstellt am: 21. Dez. 2004 12:28    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 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...

CUSee You & tia & HTHHope this helps (Hoffe, es hilft weiter)

Sebastian

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