vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Re: Programm wird nach längerer Laufzeit langsamer... 
Autor: teccer
Datum: 04.11.04 11:43

ok, jetzt fassen wir das mal zusammen. was du testen wolltest ist ok. ob ein programm nun 1, 2 oder 20 stunden läuft spielt keine rolle. was du testen wolltest, ist also 8 stunden last des programms. aber was ist nun last. das programm selber ist es sicher nicht. dein programm ist ein objekt, alles was in deinem programm drin ist, sind objekte. und objekte werden vom Betriebssystem verwaltet. Dafür gibt es, wei du schon sagtest Speicher, eine CPU und einen Cache. Wie du schon sagst, beansprucht das BS den Cache, wenn du viele Daten hin und her schiebst und dadurch kann ein Rechner langsamer werden.

Das hat aber viele Ursachen. Aus diesem Grund haben Festplatten ebenfalls einen Cache. Es kann viele Gründe geben, warum das dann langsamer wird. Cache zu groß, zu kleine, viel zu große Partitionen und und und.

Die 36 MB sind nicht bei 256 MB das Problem, sondern zum Beispiel ein Cache. Alles was du am Client also tätigst, ob nun viel in einer Stunde oder länger, belastet den Client. Die 36 MB ist das was du siehst. Sprich im Task-Manager, was aber nicht damit gleichzusetzen ist, ob du mit nem Array von 1.000.000 Positionen mal eben 160 MB im Speicher blockierst.

Noch mal zu dem Test. Dein Test macht meiner Meinung keinen Sinn, weil du testet wie lange es dauert bis der Client in die Knie geht wenn du 2000 mal Datenschreibprozesse ausführst, danach liest usw. Sollte dein Programm von natur aus können sollen, solltest du dir eine andere Variante überlegen. Dafür wurden bei DB-Systemen Procedures eingeführt. Denn die erledigen die Arbeit. Sprich DB auf nem Server und Client bedient ne Procedure. Fertig. Client kann weiter arbeiten und Procedure arbeitet Zeug ab. Wenn dein Programm das können muss, dann solltest du besser über einen Dienst nachdenken, der im Hintergrund läuft und nichts mit dem eigentlichen Programm zu tun hat. Aber dann halt auch mit eben beschriebenen verfahren.

Was die Objekte angeht und deinem nothing. Du verlangst vom Dotnet nicht zu viel, ganz im Gegenteil. Du müsstest eher zu viel von Vb6 verlangen, der mit dotnet wurde der GC (Garbage Collector) eingeführt, der dir genau die lästige Arbeit mit der Objektzerstörung von der Seele nimmt. Es wird nämlich immer vorkommen, dass du mit VB als Beispiel kein Nothing an einer Stelle gesetzt hast und dann wurde die Speicher-Adresse halt nicht gelöscht. Aus diesem Grund verwaltet der GC genau das. Sprich grundsätzlich ist es völlig egal, ob du dem GC mit nothing etc. was mitteilst. Sobald der GC merkt (und da ist der intelligent genug für), dass Speichermangel herscht geht er durch den Speicher und beseitigt nicht mehr benötigte objekte.

Wenn du dem GC überhaupt ein wenig entgegenkommen kannst, dann solltest du mit Dispose arbeiten. Dafür gibt es eine Schnittstelle die du in jede deiner Klassen implementieren kannst. In die Dispose-methode schreibst du dann Code rein, der inenrhalb deiner klasse aufräumt. zum beispiel wenn deine klasse andere objekte erstellt hat, die du nun ja wieder mit dispose beenden kannst. zusätzlich sollte man dann noch gc.SuppressFinalize(obj as object) setzen. Als Object reicht es me zu schreiben, denn es geht ja um deine eigene klasse. für den zusätzlichen sicheren Fall, wenn du im programm obj.dispose mal vergessen solltest, kannst du noch ein Destruktor setzen, der auf die Dispose zeigt.

Das alles führt nun aber nicht dazu, dass nun wirklich auch direkt das Objekt im Speicher gelöscht wird, sondern das bleibt Sache des GC.

Wenn du einen Schätzwerts der Anzahl der Bytes benötigst nutze
GC.GetTotalMemory(True)

Fazit kümmere dich nicht so sehr um den GC, der macht das schon und heute ist jeder Client selber dafür verantwortlich, wie viel er mit dem PC machen will. und dotnet programm verbrauchen zu beginn etwas mehrt speicher, werden dann aber durch ds framework später schneller. du kannst dir auch nicht mit der normalen grafikkarte und 128 mb ram ein spiel der neusten generation installieren und dann auf die firma schimpfen (in dem fall also du), weil es zu langsam ist oder @!#$ aussieht. das ist sache des client. schreibe deine systemanfoderungen an dein programm und überlasse dem rest dem user, der dein prog nutzen will.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Programm wird nach längerer Laufzeit langsamer...1.265lars00703.11.04 10:03
Re: Programm wird nach längerer Laufzeit langsamer...1.004teccer03.11.04 11:20
Re: Programm wird nach längerer Laufzeit langsamer...1.224lars00704.11.04 09:27
Re: Programm wird nach längerer Laufzeit langsamer...1.223teccer04.11.04 11:43
Re: Programm wird nach längerer Laufzeit langsamer...998lars00704.11.04 12:01
Re: Programm wird nach längerer Laufzeit langsamer...934teccer04.11.04 12:05

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel