Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Frage Entwicklung Visual Studio

Klasseneinteilung und Performance

Mitglied: MarcoBorn

MarcoBorn (Level 1) - Jetzt verbinden

14.03.2014 um 09:01 Uhr, 1666 Aufrufe, 15 Kommentare

Hallo Forum,
ich habe in VB.Net eine Dll geschrieben, die u.a. Excel und Word startet und zwischen diesen beiden Programmen Daten austauscht etc.

Das Tool braucht ca. 20 Minuten für einen Durchlauf und Excel bläht sich von 100.000k auf mehr als 800.000k RAM auf.

Ist es sinnvoller, die Funktionen jeweils in einzelne Klassen aufzuteilen oder alles in 1 Klasse zu packen? Sollte man Variablen eher lokal oder global definieren? Gibt es außer dem Setzen auf Nothing noch andere Möglichkeiten, den Speicherbedarf zu reduzieren?

Vielen Dank im voraus,
M. Born
Mitglied: colinardo
14.03.2014, aktualisiert um 09:28 Uhr
Hallo M. Born,
Da uns hier der Code fehlt ist eine Einschätzung in deinem Fall schwierig. Kommt halt sehr darauf an wie dein Code aufgebaut ist, da hat jeder seinen eigenen Stil.
Du hast aber die Möglichkeit die Garbage Collection manuell aufzurufen und damit unbenötigte Resourcen freizugeben:
GC.Collect()
Viele Objekte bieten auch eine Dispose() Methode wenn sie nicht mehr gebraucht werden.

Grüße Uwe
Bitte warten ..
Mitglied: MarcoBorn
14.03.2014 um 09:31 Uhr
Hallo Uwe, danke fuer die schnelle Antwort.

Es gibt also keine generelle Empfehlung, welcher Weg besser bzw. performanter ist? Den GC werde ich mal einbauen, wird hoffentlich etwas bringen. Mein Code umfasst ca. 20 Funktionen und Prozeduren mit ca 1800 LOC, die ich zur Zeit in 2 Klassen aufgeteilt habe.

Viele Grüße,
M. Born
Bitte warten ..
Mitglied: colinardo
14.03.2014, aktualisiert um 09:41 Uhr
Mein Code umfasst ca. 20 Funktionen und Prozeduren mit ca 1800 LOC
das ist ja noch winzig

Ich denke es kommt eher darauf an wie viel Objekte du von den Klassen generierst. Wenn also oft neue Objekte dieser zwei Klassen erstellt werden wäre es sicher vorteilhafter sie aufzuteilen. Aber ich würde eher ein Augenmerk auf neu erzeugte Variablen in Schleifen werfen.

Grüße Uwe
Bitte warten ..
Mitglied: MarcoBorn
14.03.2014 um 09:49 Uhr
Hallo Uwe,
ich nutze zum Zugriff auf die Office-Komponenten ein Tool namens Excel-DNA, das einen Versions-unabhaengigen Wrapper darstellt. So brauche ich mir um die Excel-Version des Nutzers keine Gedanken machen.

Mein Tool besteht aus einer Hauptfunktion, die die anderen jeweils aufruft. Alle Variablen werde am Ende der Funktionen auf Nothing gesetzt.

Viele Grüße,
M. Born
Bitte warten ..
Mitglied: colinardo
14.03.2014, aktualisiert um 09:55 Uhr
Dann wäre vielleicht mal ein Performance Monitoring deiner Applikation angedacht bei der du die Größen der Objekte und den Garbage-Collector überwachst. Mehr dazu steht hier:http://msdn.microsoft.com/en-us/library/ff647791.aspx (Abschnitt CLR and Managed Code)

Grüße Uwe
Bitte warten ..
Mitglied: MarcoBorn
14.03.2014 um 09:59 Uhr
Danke für den Link. Ich schaue mir das mal an. Obwohl ich den GC mehrmals in die Hauptfunktion eingebaut habe, scheint es keinen Einfluss zu haben. Das Tool läuft gerade durch, ist aber schon wieder größer als 700MB.
Bitte warten ..
Mitglied: colinardo
14.03.2014, aktualisiert um 10:04 Uhr
Zitat von MarcoBorn:
Danke für den Link. Ich schaue mir das mal an. Obwohl ich den GC mehrmals in die Hauptfunktion eingebaut habe, scheint es
keinen Einfluss zu haben. Das Tool läuft gerade durch, ist aber schon wieder größer als 700MB.
mehrfaces aufrufen hintereinander ist keine so gute Idee, das erledigt NET normalerweise automatisch, aber was macht das Tool denn so, wenn man fragen darf ?
Bzw. wo und wie nutzt du die DLL ? 700MB ist heftig...
Bitte warten ..
Mitglied: MarcoBorn
14.03.2014 um 10:22 Uhr
Die DLL startet je 1 Word und Excel. In Excel wird eine Xlt geladen, die Buttons und Optionsfelder zur Steuerung hat. In Word wählt der Nutzer eine Datei aus. Diese wird zuerst auf gewisse Kriterien hinsichtlich der Struktur untersucht. Wenn alles okay ist, werden Teile der Worddatei nach Excel eingelesen. Dann werden, basierend auf den Worddaten in Excel Formeln generiert und die Zellen formatiert. All dies erfolgt in den 2 Klasen und 1800 LOC. In der späteren Weiterverarbeitung der Daten, die aber nicht so performancekritisch sind, stecken weitere rund 5k LOC.

Da ich gerade im Zug bin, kann ich den CLR Profiler erst später im Büro testen.
Bitte warten ..
Mitglied: MarcoBorn
14.03.2014 um 13:28 Uhr
Der Profiler funktioniert leider nicht, da ich ja keine Exe erzeuge, sondern eine DLL. Auch den in SharpDevelop integrierte Profiler funktioniert nicht.
Bitte warten ..
Mitglied: colinardo
14.03.2014 um 13:31 Uhr
dann mach doch schnell eine exe draus, die die DLL einbindet ...
Bitte warten ..
Mitglied: MarcoBorn
18.03.2014 um 15:28 Uhr
Wenn ich die Datei als Verweis in SharpDevelop einbinde, stürzt mir die IDE ab. In VS Express kann ich sie zwar einbinden, aber wenn aus der DLL heraus Excel gestartet werden soll, stürzt die Exe ebenfalls ab. Gibt es ev. auch Profiler, die direkt auf eine DLL zugreifen können?
Bitte warten ..
Mitglied: colinardo
18.03.2014, aktualisiert um 15:41 Uhr
Zitat von MarcoBorn:

Wenn ich die Datei als Verweis in SharpDevelop einbinde, stürzt mir die IDE ab. In VS Express kann ich sie zwar einbinden,
aber wenn aus der DLL heraus Excel gestartet werden soll, stürzt die Exe ebenfalls ab.
Da stimmt dann aber etwas nicht, bzw. irgendwo wird da ein ganz grober Fehler in der DLL eingebaut sein, vermutlich deshalb auch der enorme Speicherverbrauch.... Sicherstellen das kritische Stellen mit Try...Catch Konstrukten abgesichert sind!
Hier hilft dir normalerweise der Debugger von VS.

Bist du Sicher das ExcelDNA hier nicht der Übeltäter ist ? lässt sich einfach feststellen, indem man stattdessen nur mal mit der lokal installierten Interop-Excel arbeitet.
Bitte warten ..
Mitglied: MarcoBorn
18.03.2014 um 17:03 Uhr
Eine Try-Catch habe ich in jeder Funktion/Prozedur eingebaut. Ich verfolge regelmäßig die Diskussionen zu ExcelDNA auf dessen Newslist. Dort hat sich keiner über Probleme in diese Richtung aufgeregt. Ich werde dort aber auch noch einmal nachfragen. Kann es ggf. daran liegen, dass man eine XLL nicht aus einer EXE heraus aufrufen kann?
Bitte warten ..
Mitglied: colinardo
18.03.2014, aktualisiert um 17:32 Uhr
Zitat von MarcoBorn:
nachfragen. Kann es ggf. daran liegen, dass man eine XLL nicht aus einer EXE heraus aufrufen kann?
meinst du mit XLL eine Excel Addin DLL? das hätte man wissen müssen.
Bitte warten ..
Mitglied: MarcoBorn
18.03.2014 um 17:29 Uhr
Ja, ein Excel XLL. Laut Doku bzw. Google sollen das ja auch DLLs sein.
Bitte warten ..
Ähnliche Inhalte
Windows Server
Terminalserver, Performance
Frage von Andreas-scaWindows Server9 Kommentare

Hallo an die IT-Profis, wir (Schule im schönen Hessen, Fischbachtal) haben zwei Terminalserver bekommen. Ziel war die "normalen" Arbeitsplätze ...

Switche und Hubs
Routing Performance
Frage von geforce28Switche und Hubs6 Kommentare

Hallo Leute, aktuell nutzen wir ein Lancom 7100+ VPN Central Site Gateway für's Routing. Als "Coreswitch" haben wir ein ...

Linux Desktop
ThinClients - Performance
Frage von TlBERlUSLinux Desktop3 Kommentare

Hallo Zusammen, wir überlegen, bei uns einige Rechner, die nur auf dem Terminalserver(2008R2) arbeiten, auf ThinClients umzustellen. Hierzu haben ...

LAN, WAN, Wireless
Performance Netzwerk
Frage von TomCatShSLAN, WAN, Wireless5 Kommentare

Hallo, wir haben die befürchtung das etwas mit unserem Netzwerk nicht stimmt. Iperf Messungen: Server > Arbeitstation C:\iperf>iperf3.exe -c ...

Neue Wissensbeiträge
Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 5 StundenDatenschutz

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Microsoft

Letzte Updates für Win10 und Server2016 müssen bei Bedarf über den Update catalogue in den WSUS importiert werden!

Tipp von DerWoWusste vor 10 StundenMicrosoft1 Kommentar

automatisch kommt da nichts an im WSUS und auch nicht im SCCM. Siehe Hinweise zum Bezug der jeweils neuesten ...

Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 3 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 4 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement22 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk13 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...

Windows Server
Terminal Server 2016 erkennt Berechtigungen nicht
gelöst Frage von Thomas2Windows Server10 Kommentare

Hallo Administratoren, folgendes Problem stellt sich dar: Es gibt zwei Windows Server 2016, die als Terminal Server fungieren. Jetzt ...

SAN, NAS, DAS
Wer kennt sich mit QNAP und CISCO aus ?
gelöst Frage von MachelloSAN, NAS, DAS10 Kommentare

Hallo Zusammen hier im Forum, Ich habe ein QNas 451+ und dieses NAS hat zwei GBit Lan Adapter die ...