Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Anwendung langsam

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:  Anwendung langsam (1171 mal gelesen)
DrCNC
Mitglied



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

Beiträge: 96
Registriert: 04.01.2011

erstellt am: 04. Jul. 2014 17:48    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,
Haber schon längerem eine Anwendung in VB.net geschrieben und lief auch sehr gut. Aber mit ACad 2015 merke ich eine erhebliche Verlangsamung der Anwendung. Was für einen Grund kann dies haben.
Danke
Johann

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

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 04. Jul. 2014 19: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 DrCNC 10 Unities + Antwort hilfreich

Du könntest ja schon selbst mal nachsehen in welchem Part es lahmt und dann hier angeben. Welche Vorgänge werden abgearbeitet? Die Info 2013-2015 ist schon arg allgemein.
Hast du die Möglichkeit 2013 noch zu testen oder steht das nicht mehr zur Verfügung?

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

DrCNC
Mitglied



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

Beiträge: 96
Registriert: 04.01.2011

erstellt am: 05. Jul. 2014 12:14    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,
Ich habe mir das nocheinmal näher angeschaut.
Es kommen häufig Abfragen auf die geöffnete ACad Datei mit den beiden Funktionen.
Code:

    Public Function LayerAbfrage(ByVal LayerName As String)
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim acCurDb As Database = acDoc.Database
        Dim TrAct As DatabaseServices.Transaction = Nothing
        Dim tAcadDoc As ApplicationServices.Document = ApplicationServices.Application.DocumentManager.MdiActiveDocument
        Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
            Dim acLyrTbl As LayerTable
            acLyrTbl = acTrans.GetObject(acCurDb.LayerTableId, OpenMode.ForRead)
            If Not acLyrTbl.Has(LayerName) Then
                LayerAbfrage = 0
            Else
                Dim tSelSet As EditorInput.SelectionSet = getObjectsOnLayer(tAcadDoc.Editor, TrAct, LayerName)
                If tSelSet IsNot Nothing Then
                    LayerAbfrage = 1
                Else
                    LayerAbfrage = 0
                End If
            End If
        End Using
    End Function

    Public Function Blockabfrage(ByVal strBlockName As String)
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim acCurDb As Database = acDoc.Database
        Dim TrAct As DatabaseServices.Transaction = Nothing
        Dim tAcadDoc As ApplicationServices.Document = ApplicationServices.Application.DocumentManager.MdiActiveDocument
        Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
            Dim acLyrTbl As BlockTable
            acLyrTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)
            If Not acLyrTbl.Has(strBlockName) Then
                Blockabfrage = 0
            Else
                Dim tSelSet As EditorInput.SelectionSet = getObjectsOnBlock(tAcadDoc.Editor, TrAct, strBlockName)
                If tSelSet IsNot Nothing Then
                    Blockabfrage = 1
                Else
                    Blockabfrage = 0
                End If

            End If
        End Using
    End Function


Alles andere ist eigentlich nur Textlesen und Textschreiben in einer bestimmten Reihenfolge (für eine CNC-Maschine).
Bis ACad 2013 ca. 8 sec., bei Acad 2015 15 sec.
Danke
mfg
Johann

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

Ingenieur Studio HOLLAUS
Mitglied
CAD / CAFM / GIS Beratung-Programmierung-Schulung


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

Beiträge: 1049
Registriert: 06.11.2008

Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks)
RKV .... CAFM+mehr
HMap ... Vermessung und Verkehr
OoC .... Raumplanung
CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)

erstellt am: 06. Jul. 2014 23:12    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 DrCNC 10 Unities + Antwort hilfreich

Wäre jetzt interessant zu wissen, was sich hinter "getObjectsOnLayer" und "getObjectsOnBlock" verbirgt bzw. wozu diese Abläufe notwendig sind. Wozu werden Objekte auf Layer und Objekte "auf"(?) Block gebraucht.
Und wenn dieses mit SelectionSets gebaut wird, dann können Geschwindigkeitsunterschiede vielleicht sogar mit Zoom-Ausschnitt und/oder mit der Graphikhardware und -treibern zu tun haben.
Mit dem Code hier kann ich mal nicht erkennen, was unterschiedlich sein sollte, aber eben auch nicht probieren, ob es bei mir auch Unterschiede in der Performance zeigen würde.

------------------


www.cars4fun.at

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

DrCNC
Mitglied



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

Beiträge: 96
Registriert: 04.01.2011

erstellt am: 07. Jul. 2014 10:04    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,
Mit diesen beiden Funktionen werden nur Layer bzw. Blöcke mit einen bestimmten Namen gesucht. Wenn diese dan vorhanden sind, wird in einer Textdatei nur text geschrieben.
danke
Johann

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

Ingenieur Studio HOLLAUS
Mitglied
CAD / CAFM / GIS Beratung-Programmierung-Schulung


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

Beiträge: 1049
Registriert: 06.11.2008

Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks)
RKV .... CAFM+mehr
HMap ... Vermessung und Verkehr
OoC .... Raumplanung
CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)

erstellt am: 07. Jul. 2014 14:52    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 DrCNC 10 Unities + Antwort hilfreich

Zitat:
Mit diesen beiden Funktionen werden nur Layer bzw. Blöcke mit einen bestimmten Namen gesucht. Wenn diese dan vorhanden sind ...
Versteh ich leider nicht, wozu dann ein SelectionSet notwenig wird, wenn gesucht werden soll, ob ein Layer existiert. Probier mal einen Performance-Vergleich ohne SelectionSet-Bildung.

------------------


www.cars4fun.at

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

Karlovac
Mitglied



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

Beiträge: 54
Registriert: 12.09.2013

AutoCAD Mechanical 2012-2015
Windows 7 Enterprise X64
Visual Studio 2010/2013
Intel Xeon W3680
Nvidia Quadro 2000
16 GB RAM

erstellt am: 08. Jul. 2014 08:40    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 DrCNC 10 Unities + Antwort hilfreich

Hallo,

wenn es darum geht alle Objekte eines bestimmten Layers abzufragen:

hier ein Beispiel.

Schöne Grüße

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

Ingenieur Studio HOLLAUS
Mitglied
CAD / CAFM / GIS Beratung-Programmierung-Schulung


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

Beiträge: 1049
Registriert: 06.11.2008

Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks)
RKV .... CAFM+mehr
HMap ... Vermessung und Verkehr
OoC .... Raumplanung
CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)

erstellt am: 08. Jul. 2014 13: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 Nur für DrCNC 10 Unities + Antwort hilfreich

Zitat:
wenn es darum geht alle Objekte eines bestimmten Layers abzufragen
Dann hoffe ich nicht, dass man eine Schleife durch alle Layer macht und bei jedem Layer ein neues SelectionSet. Das wäre gähnend langsam. Dann alle Objekte auf einmal selektieren und deren Layer ansehen/zählen.

------------------


www.cars4fun.at

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

DrCNC
Mitglied



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

Beiträge: 96
Registriert: 04.01.2011

erstellt am: 08. Jul. 2014 14:35    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,
Habe die beiden Funktionen umgeändert;
Code:

    Public Function Blockabfrage(ByVal strBlockName As String)
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim acCurDb As Database = acDoc.Database
        Dim TrAct As DatabaseServices.Transaction = Nothing
        Dim tAcadDoc As ApplicationServices.Document = ApplicationServices.Application.DocumentManager.MdiActiveDocument
        Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
            Dim acLyrTbl As BlockTable
            acLyrTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)
            If Not acLyrTbl.Has(strBlockName) Then
                Blockabfrage = 0
            Else
                ' Dim tSelSet As EditorInput.SelectionSet = getObjectsOnBlock(tAcadDoc.Editor, TrAct, strBlockName)
                'If tSelSet IsNot Nothing Then
                Blockabfrage = 1
                'Else
                'Blockabfrage = 0
                'End If

            End If
        End Using
    End Function


Funktioniert auch 1 sec. Geschwindigkeitssteigerung, muss die Geschwindigkeitseinbuße noch suchen.
mfg
Johann

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