PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Konflikt zwischen .NET und OpenGL


Grestorn
2005-09-24, 14:28:32
In letzter Zeit gab es einige Berichte von Problemen von nHancer mit bestimmten Spielen, die entweder nicht laufen oder eine deutlich geringere Framerate aufweisen, wenn nHancer läuft.

Das hat mich zunächst sehr überrascht, da absolut nichts im Code ist, was dies verursachen könnte.

Nach einigen Untersuchungen bin ich darauf gekommen, das lediglich OpenGL Spiele betroffen sind. Und dass das Problem nichts mit nHancer zu tun hat, sondern ein allgemeines .NET Problem zu sein scheint.

Das Phänomen lässt sich wie folgt nachstellen (auf einer 7800GTX mit 78.03):

Sicherstellen, dass kein .NET Programm läuft und dann in Doom 3 "timedemo demo1 usecache" in der Konsole eingeben. Den Wert aufschreiben.
Das Developer Studio .NET 2003 von Microsoft öffnen (Die 2005 Beta zeigt das selbe Verhalten).
Ein neues Visual C# Projekt anlegen und zwar vom Typ "Windows Application".
Während das Studio mit dem angelegten Projekt offen ist, Doom 3 erneut starten und das selbe timedemo laufen lassen. Der Wert sollte deutlich unter dem vorher gemessen liegen
Das Studio beenden
Ein weiteres Doom3 Timedemo ergibt wieder den ursprünglichen Wert


Bemerkenswerte Details:
Das Öffnen des Developer Studios alleine behindert Doom3 nicht. Es muss zusätzlich ein beliebiges VisualC# Windows Application Projekt geöffnet werden.
Wenn ein solches Projekt einmal offen war, dann muss das Studio komplett geschlossen werden, um den Normalzustand wiederherzustellen.
Auch ohne Studio behindert eine C# .NET Applikation i.d.R. OpenGL, allerdings ist eine vollkommen leere. Ich habe noch nicht herausgefunden, warum z.B. nHancer behindert, eine vollkommen leere Applikation aber nicht.


Mich würde nun brennend interessieren, ob dieses Phänomen von den Grafikkarten-Treibern abhängt. In diesem Zusammenhang wäre es toll, wenn mal ein ATI Besitzer, der Zugang zum Developer Studio hat (die 2005 Beta kriegt man für $10), den oben beschriebenen Ablauf nachvollziehen könnte, und das Ergebnis hier posten würde. Selbiges gilt auch für nVidia Anwender, die eine deutlich ältere Treiberversion verwenden.

Da ATI selbst ja ein .NET Applet verwendet, kann ich mir nicht vorstellen, dass die ATI-Treiber das selbe Phänomen zeigen. Aber ausprobieren sollte man es auf jeden Fall.

Wichtig! Auf jeden Fall vor dem Test alle anderen .NET Applikationen beenden! Auch das CCC!

Auf jeden Fall muss hier etwas getan werden. Im Moment verhindert das Problem "nur" den dauerhaften Einsatz von nHancer (man muss es immer beenden bevor man ein OpenGL Spiel startet) aber wenn in Zukunft immer mehr .NET für Applikationen eingesetzt werden sollte, dann wird wohl jeder betroffen sein...

zeckensack
2005-09-25, 18:29:45
Hast du im Taskmanager mal nachgesehen, ob sich in dieser Konstellation die (inaktiven) .NET-Prozesse CPU-Zeit nehmen?

Auf Systemebene könnte man das damit erklären, dass
a).NET-Prozesse standardmäßig einige systemweite "Hooks" installieren, und dadurch auf Nachrichten fremder Applikationen reagieren
und/oder
b)der Garbage Collector permanent weiterläuft.

Grestorn
2005-09-25, 21:19:30
Ja habe ich. CPU Zyklen schluckt weder das Studio noch die .NET Applikation, wenn sie nichts tun.

Ich habe eher den Verdacht, dass .NET irgendeine Ressource vom Grafiktreiber anfordert, was dazu führt, dass OpenGL aus irgendeinem Grund ausgebremst wird.

Quasar
2005-09-26, 14:46:52
Aber wenn das Verhalten so wäre, dann müsste doch irgendeinem ATi-User mal aufgefallen sein, dass Doom3 mit CP deutlich fixer ist, als mit dem CCC, oder?

edit:
Von welchen "Dimensionen" sprechen wir hier?

Coda
2005-09-26, 15:32:14
Das CCC läuft doch nicht dauernd im Hintergrund, oder?

Grestorn
2005-09-26, 15:34:16
Aber wenn das Verhalten so wäre, dann müsste doch irgendeinem ATi-User mal aufgefallen sein, dass Doom3 mit CP deutlich fixer ist, als mit dem CCC, oder?Eben deswegen gehe ich davon aus, dass dieses Problem nur beim Forceware auftritt.

edit:
Von welchen "Dimensionen" sprechen wir hier?
Nun, mit SLI habe ich bei Doom 3 (1600x1200, 4xAA) über 75 fps (timedemo 1, usecache). Ohne SLI immer noch gut 55fps.

Wenn nHancer oder das .NET Developer Studio läuft, sind es meist weniger als 45fps!!! (egal ob SLI aktiv ist oder nicht).

Grestorn
2005-09-26, 15:35:46
Das CCC läuft doch nicht dauernd im Hintergrund, oder?
Doch, als TrayIcon. Und auch dafür ist .NET notwendig (es sei denn, ATI hätte ein kleines Miniprogramm ohne .NET geschrieben, dass nur das TrayIcon zur Verfügung stellt. Aber es sieht eigentlich nicht danach aus...)

Coda
2005-09-26, 17:52:50
Ich teste die Sache mal mit Dual Core.

Coda
2005-09-26, 18:00:30
Reproduzierbar (2x getestet) mit nHancer: 62FPS, ohne: 69FPS in DooM³. Sehr wirre Geschichte. Mit Dual Core wohlgemerkt, also kann es nicht an der CPU-Belastung von nHancer liegen.

Ach ja: Es kann sehr gut sein, dass das nur mit nVIDIA-Treibern vorkommt, da die OpenGL-Treiber viel unabhänger von Windows sind als die Direct3D-Treiber. Ich würde auf jeden Fall mal nVIDIA davon in Kenntniss setzen.

Solang das nicht gefixt ist, ist nHancer bei mir erstmal wieder in der Quickstart-Leiste statt im Tray. Macht eh nicht viel Unterschied.

Grestorn
2005-10-03, 09:54:34
DXTweaker ist auch betroffen (es reicht DXTweaker laufen zu lassen ohne jede Einstellung. Sofort wird Doom3 bei mir auf 44 fps limitiert).

Ich brauche einfach noch etwas mehr Input um festzuhalten, auf welchen Systemen das auftritt. Es scheint nicht bei allen der Fall zu sein, offenbar spielt die Grafikkarte und die CPU eine große Rolle.

Auch die Einstellungen in Doom 3 können wohl einen Unterschied machen.

Wenn ihr helfen wollt, dieses Problem einzugrenzen, damit nVidia das mal behebt, dann postet doch bitte Eure Erfahrungen. Macht einen Benchmark in Doom3 (Strg-Alt-^ drücken, "timedemo demo1 usecache" eingeben), einmal ohne nHancer und DXTweaker und einmal mit einem der beiden Tools und postet bitte die Werte, die ihr erhaltet.

Danke!

Expandable
2005-10-03, 13:47:48
Also ich kann das auch bestätigen. Mein System:

Athlon 64 3500+ Venice, nicht übertaktet
2x 512 MByte DDR400 RAM von Corsair ValueSelect, 2.5,3,3,10 2T nicht übertaktet
GeForce 6800 GT 256 MByte mit ForceWare 77.77 AGP 8, nicht übertaktet, 400 MHz DDR, Dual Channel
MSI K8T Neo2-FIR Mainboard mit aktuellsten VIA-Treibern

Ich hab die Timedemo jeweils nur einmal laufen lassen, aber der Effekt war deutlich zu sehen.

Zunächst mal ohne ein .NET-Programm: 59,9fps. Dann mit nHancer offen: 55,2fps. Deutlich zu sehen war, dass scheinbar sowohl die min- als auch die max-fps gesunken sind. Hoffe, das hilft ;)

Nachtrag: Einstellungen in DOOM 3:
1280x1024, High Quality, 2xAA ingame
Surround-Sound an, kein EAX

sepperator
2005-10-03, 14:42:12
System:
A64@2,3Ghz, 6800gt pcie, 1GB DDR400 RAM DC
WinXP SP2 + .net Framework 1.1 + .net Framework hotfix (KB886903)
FW 77.72

Bei mir gibts weder in 1600x1200/4x/8x noch in 640x480 einen Unterschied ob ich nHancer laufen habe oder nicht.

Ich hoffe mal, dass ich sonst kein .net Programm laufen habe. Kann man das irgendwie feststellen?

Grestorn
2005-10-03, 15:01:30
System:
A64@2,3Ghz, 6800gt pcie, 1GB DDR400 RAM DC
WinXP SP2 + .net Framework 1.1 + .net Framework hotfix (KB886903)
FW 77.72

Bei mir gibts weder in 1600x1200/4x/8x noch in 640x480 einen Unterschied ob ich nHancer laufen habe oder nicht.

Ich hoffe mal, dass ich sonst kein .net Programm laufen habe. Kann man das irgendwie feststellen?
Nicht dass ich wüsste. Aber Du kannst mal über MSConfig.exe dafür sorgen, dass überhaupt kein Autostart-Programm gestartet wird ("Diagnostic Startup") und es dann nochmal probieren.

Expandable
2005-10-03, 15:52:33
Ach so, vielleicht bei mir auch noch ganz interessant: Hab WinXP Pro SP2 mit .NET Framework 1.1. Habe keinerlei Updates für WinXP oder .NET installiert sonst.