Seite abonnieren
Artikel
Kommentare
Anmelden

3DMark06 Benchmark Ergebnis

Seit zirka einem Jahr fahre ich Microsoft Vista 64Bit und habe bis heute eigentlich nie einen Benchmark laufen lassen. Hier nun das Resultat: 4923

Mein System:

  • AMD Athlon 64 X2 4400+
  • NVIDIA GeForce 7900 GT
  • 2048 MB
  • GA-K8N-SLi

Windows Live Messenger: Fehlercode 81000306

Mögliche Windows-Updates der jüngsten Zeit haben wieder einmal für einwenig Verwirrung unter den Instant-Messaging Anwendern verursacht. Nach Installation einiger Aktualisierungen für das Betriebssystem Windows Vista war das Einloggen beim Live Messenger nicht mehr möglich.

Stundenlanges herumprobieren, aufmerksames Lesen dutzender Beiträge in entsprechenden Internetforen etc., brachten kein Erfolg, bis jemand auf die kluge Idee gekommen ist, sich doch einfach mal den MTU-Wert (Maximum Transfer Unit) näher anzuschauen. Dieser legt dabei die höchste Zahl an Bytes fest, die ein Datenpaket im Netzwerk betragen darf. Verglichen mit einem Lastwagen zeigt der MTU-Wert das höchste zulässige Gesamtgewicht des Fahrzeugs auf. Kommt das Paket darüber, darf es bestimmte Routen nicht mehr benutzen.

Mit dieser Idee wird also zunächst mit Hilfe des Kommandos “ping” der optimale MTU-Wert ermittelt.

  • ping www.heise.de -f -l 1464

Der Parameter -f verbietet dabei dem Empfänger, das Paket zu zerlegen, während -l die Größe des Paketes festlegt - diese ist in dem Beispiel auf 1464 Bytes gesetzt.

Den Wert so lange schrittweise verkleinern, bis die Eingabeaufforderung den Hinweis “Paket müsste fragmentiert werden” nicht mehr anzeigt. Zu dem eingegebenen Wert werden anschliessend 28 Bytes (IP-Header) addiert. Das Resultat ist der optimale MTU-Wert. Dieser wird in der entsprechenden Admin-Oberfläche des Routers eingegeben.

Nach einem Trennen und Verbinden der Internetleitung sollte der Windows Live Messenger wieder ordnungsgemäß funktionieren.

Falls kein Router verwendet wird, sollte der Registrierungseditor zum Einsatz kommen. Achtung! Vorher ein Backup der Registry ziehen!

  • HKEY_LOCAL_MACHINE \ SYSTEM\CurrentControlSet \ Services \ Tcpip \ Parameters \ Interfaces

Dynamische Speicherverwaltung in C++

Der Unterschied zwischen statischem Speicher und dynamischem Speicher ist der, daß der Programmierer dynamischen Speicher explizit bereitstellen lassen muss und bei Nichtgebrauchen wieder freigeben sollte.

Nehmen wir an, wir haben ein Float Array mit 100 Feldern. Beim Kompilieren des Programms wird nun 100 * sizeof(float) Bytes bereitgestellt. Wir haben also 100 Mal 4 Byte zur Verfügung. Was aber, wenn wir von diesen 100 nur 15 brauchen? Wir würden in diesem Fall mit 340 Byte unnötiger Weise den Arbeitsspeicher füllen. Oder was passiert, wenn wir plötzlich mehr als 100 Felder brauchen? Mit statischem Speicher ist eine Nachträgliche Änderung der Größe des Speichers nicht mehr möglich. Deshalb greift der Programmierer zur dynamischen Speicherverwaltung, der nicht beim Kompilieren, sondern während der Laufzeit bereitgestellt wird;

Wir erstellen ein Objekt des Datentyps und fügen nur so viele Felder in das Array, wie wir es in diesem Augenblick brauchen.
int size, *vector;
cout < < "Bitte grösse des Feldes eingeben:";
cin >> size;
vector = new int[size];
....

Nachträgliches Ändern der Größe ist möglich. Diese Art von Speicherverwaltung birgt aber auch viele Gefahren, denn alloziierter Speicher, der Verfügung gestellt wird, muss genau so wieder freigegeben werden, wenn er nicht mehr gebraucht wird.
delete [] vector;

Als Abschluss ein ganz kleines Beispiel:
struct a {
int nummer;
char *art_bez;
double preis;
int st;
int v_st;
}

void init (struct a &, int nummer, const char *art_bez, double preis, int st; int v_st=0) {
a.nummer = nummer;
a.art_bez = new char [strlen(art_bez)+1];

if (a.art_bez == NULL) {
cerr < < "Fehler ..." << endl;
exit(EXIT_FAILURE); }

strcpy(a.art_bez, art_bez);
a.preis = preis;
a.st = st;
a.v_st = v_st;
}

SQL: Tabellen erstellen und manipulieren

Seit einigen Tagen haben wir endlich begonnen, uns mit Datenbanken zu beschäftigen. Im Hause benutzen wir dafür eine Oracle Datenbank.
Zur Zeit beschränken wir uns lediglich auf simple SELECT, INSERT und UPDATE Statements.

Hier ein Beispiel:
SELECT pf_name FROM g_pflanzen WHERE sorte = 'BAUM';

Also es kann sein, dass ich eine Lösung gefunden habe. Undzwar hatte das Spiel bei mir gelegentlich unter den höchsten Details geruckelt. Ich spiele mit einer Auflösung von 1280*1024 Pixeln, Antialiasing 4x, Anisotropic Filter 16x und alle Details auf Maximum. Im folgenden Text versuche ich eine Lösung zu präsentieren, die bei mir Wunder gewirkt hat.
Artikel fortsetzen.

Ältere Artikel »