2017-09-14 4 views
0

Ich entwickle eine Angular/Typescript-Anwendung, die den Autodesk Forge-Viewer zum Anzeigen von Gebäudemodellen auf Smartphones und Tablets verwendet. Die Anwendung selbst läuft reibungslos, aber das Problem tritt auf, wenn ich die Anwendung schließe. Nach dem Schließen der Anwendung merke ich, dass kaum Speicher freigegeben wird, wie im Bild unten zu sehen ist (Ich schließe die Anwendung um die 8-Sekunden-Marke) und nach dem Öffnen des Betrachters für zwei oder drei Mal wird es nicht mehr genügend Arbeitsspeicher und abstürzen. enter image description here Wenn ich die Anwendung schließe, rufe ich sowohl die Methode tearDown() als auch die Methode finish() wie in den Forge-Dokumenten beschrieben auf und setze alle möglichen Verweise auf den Forge-Viewer auf null, aber das Speicherleck bleibt bestehen. Dies ist der Haupt Teil meines Betrachters Code:Schwerwiegende Speicherverluste im Autodesk Forge-Viewer auf Geräten

this.initOptions = { 
    path: 'url to model', 
    env: 'Local', 
    useADP: false, 
    extensions: [], 
}; 

Autodesk.Viewing.Initializer(this.initOptions,() => { 

    this.onEnvInitialized(); 
}); 

private onEnvInitialized() { 

    this.viewer = new Autodesk.Viewing.Private.GuiViewer3D(this.viewerContainer.nativeElement, {}); 
    this.viewer.initialize(); 
    this.viewer.loadModel(this.initOptions.path, {}, (doc) => { 
     // further forge viewer execution here 
    }, (errorMsg) => { 
     console.log(errorMsg); 
    }); 
} 

public ngOnDestroy() { 

    // remove all eventlisteners 
    this.initOptions = null; 
    this.viewer.tearDown(); 
    this.viewer.finish(); 
    this.viewer = null; 
} 

Ist das ein bekanntes Problem und/oder gibt es eine Weise, die ich manuell den Speicher durch den Forge-Viewer nach dem Verschluss verwendete freigeben kann? (Es ist ein Teil des Anwendungsfalls, dass ich in der Lage sein mehr als drei Zuschauer in einer Sitzung hintereinander zu öffnen.)

Update [19-09-17]

Ich habe versucht, meine Öffnung Betrachter in einem frischen, leeren angular2-Projekt, und obwohl im Allgemeinen weniger Speicher verwendet wird, gilt immer noch das gleiche Verhalten, dass der Speicher nicht gelöscht wird, wie man sehen kann here. Ich stelle fest, dass die Ereignis-Listener jetzt drastisch reduziert sind. Ich habe auch den Forge Viewer auf Version 2.17 aktualisiert, und das gleiche Problem gilt auch hier.

Antwort

0

Welche Version des Viewers verwenden Sie derzeit? Hier sehen Sie eine Liste der letzten Änderungen in der Viewer-Version. V2.17 hat standardmäßig eine Speichergrenze von EIN.

https://developer.autodesk.com/en/docs/viewer/v2/overview/changelog/

Auch die Version des Betrachters kann überprüft werden, wenn es nicht von der Konsole, indem Sie LMV_VIEWER_VERSION definiert ist

Lassen Sie mich wissen darüber so können wir die Forschung darüber fortsetzen. Prost,

+0

Hallo Jaime, ich bin derzeit mit Version '2.13' des Betrachters Forge. Ich habe bereits mit neueren Versionen des Viewers experimentiert, aber das hat den Großteil unserer Event-Handhabung ruiniert, so dass ich am Ende wieder auf 2.13 zurückgesetzt habe. – sjoerd216

+0

Hallo, ich schlage vor, versuchen zu einer neueren Version zu gelangen, um die zu adressieren Memory-Leak-Problem, das Sie erleben. Welche Art von Problemen haben Sie derzeit mit dem Viewer, die Ihre Ereignisbehandlung unterbrechen?Ich glaube nicht, dass es etwas gibt, was getan werden kann, um dies ohne das Upgrade auf eine neuere Version zu beheben. –

+0

Nach dem Upgrade auf 2.17 wurde 'FINAL_FRAME_RENDERED_CHANGED_EVENT' im Projekt nicht mehr ausgelöst. Wir verwenden diesen Ereignis-Listener zusammen mit dem 'GEOMETRY_LOADED_EVENT', um festzustellen, wann der Viewer zur Verwendung bereit ist. Da das erste Ereignis jedoch nie ausgelöst wird, bleibt die Anwendung hängen und wartet auf das Ereignis. Gibt es eine Alternative für diesen Event-Handler oder eine andere Möglichkeit zu wissen, wann das Modell vollständig geladen ist? – sjoerd216

0

Das Problem bleibt mit Version 3.3.5 des Schmiede-Viewers. Das Problem scheint jedoch ein wenig tiefer zu sein. Es sieht so aus, als ob beim Aufruf viewer.finish() kein GPU-Speicher für die Texturen freigegeben wird.

Wir rufen diese Funktion jedes Mal auf, wenn Sie von der Seite mit dem Viewer weg navigieren, da eckig die Zeichenfläche im DOM zerstört. Ich würde erwarten, dass .finish auch die Texturen aus dem Speicher entfernt. Gibt es eine andere Funktion, die aufgerufen werden kann, um alle Modelle und Texturen komplett zu entladen?

Hier sind einige Screenshots, wo Sie den Speicheraufbau sehen können.

Initial initialisation of the page

after returning to this page after closing it

after returning to this page after closing it a third time

+0

Wenn Sie eine neue Frage haben, klicken Sie bitte auf die Schaltfläche [Frage stellen] (https://stackoverflow.com/questions/ask). Fügen Sie einen Link zu dieser Frage hinzu, wenn es hilft, Kontext bereitzustellen. - [Aus Bewertung] (/ review/low-quality-posts/18751209) –

+0

Es ist keine neue Frage, es ist eine Erweiterung auf Sjoerds Frage mit mehr Daten.Sie beziehen sich auf genau das gleiche Problem in der gleichen App wie Sjoerd. –

+0

Sie als Antwort eine Frage stellen, neu oder Erweiterung, bitte verstehen, es ist nicht der Ort –

Verwandte Themen