Laden...

OnPaint als Administrator schneller als als normaler User

Erstellt von Limnfo vor 5 Jahren Letzter Beitrag vor 5 Jahren 4.506 Views
L
Limnfo Themenstarter:in
20 Beiträge seit 2017
vor 5 Jahren
OnPaint als Administrator schneller als als normaler User

Hallo!

ich habe ein WinForms-Programm, welches auf einem Panel Daten eines Echolots zeichnet (habe damals diesen Thread aufgemacht, um die beste Methode zu ermitteln, die Daten schnell zu zeichnen).

Nach Monaten der Verwendung - inzwischen auch von anderen Usern - bin ich draufgekommen, dass das Programm, wenn man in Windows als Administrator angemeldet ist, wesentlich schneller zeichnet. Wenn man hingegen als normaler User (kann auch ein User mit Administrator-Rechten sein) angemeldet ist, dauert das Zeichnen um einiges länger.

Das Programm liegt normalerweise auf einer Netzwerkfestplatte, ebenso wie die zu zeichnenden Daten. Zum Testen habe ich sowohl das Programm als auch die Daten lokal auf meinen Rechner kopiert und stelle dort selbiges fest. Es macht auch keinen Unterschied, wenn ich das Programm "als Administrator ausführe"...

Hat jemand eine Idee, woran das liegen könnte? Mir ist soetwas bisher noch nicht untergekommen.

MfG
Limnfo

16.841 Beiträge seit 2008
vor 5 Jahren

Und Du misst die Geschwindigkeit deterministisch oder mit nem Bauchgefühl?

Und ist der Titel jetzt irreführend oder nicht?
Geht es um den Admin, oder um das Netzlaufwerk?

Denn zum einen sagst

bin ich draufgekommen, dass das Programm, wenn man in Windows als Administrator angemeldet ist, wesentlich schneller zeichnet.

und zum anderen

Es macht auch keinen Unterschied, wenn ich das Programm "als Administrator ausführe"...

Was denn nun?

L
Limnfo Themenstarter:in
20 Beiträge seit 2017
vor 5 Jahren

Ich messe die Geschwindigkeit per Gefühl - es dauert definitiv länger (ca 2-3 mal so lange) als normaler User.

Der Titel ist hoffentlich nicht irreführend.
Es gibt in Windows einen User, der "Administrator" heißt, der standardmäßig angelegt wird und Administratorprivilegien hat.
Man kann weiters User anlegen, welche Administratorprivilegien haben, oder nicht. Im Folgenden nenne ich diesen User "Franz". Für das Problem ist es nicht relevant, ob Franz Administratorprivilegien hat oder nicht.
Und man kann in Windows 7 auf jedes Programm rechtsklicken und die Option "Als Administrator ausführen" auswählen.

Also nochmal zur Klarstellung:

Das Programm braucht (gefühlt) zum Zeichnen der Daten mit dem User "Franz" wesentlich länger als mit dem User "Administrator". Dabei macht es keinen Unterschied, ob man als User "Franz" auf das Programm rechtsklickt und die Option "Als Administrator ausführen" auswählt.

Nun alles klar?

T
2.224 Beiträge seit 2008
vor 5 Jahren

Gefühle Geschwindkeit ist relativ und sagt nichts aus.
Kannst du deinen Code per Profiler überprüfen wie den die Geschwindigkeiten sind bzw. per logging schauen ob er tatsächlich schneller läuft?
Wenn die Unterschiede nicht messbar sind, ist es eben nur dein Gefühl.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

16.841 Beiträge seit 2008
vor 5 Jahren

Das kann viele Ursachen haben und sich eben nur auf das Zeichnen auswirken.
Nimm einen Profiler um zu ermitteln, welcher Teil des Codes für den Leistungsverlust verantwortlich ist.

In Visual Studio (zB 2017) ist bereits ein Profiler integriert.

L
Limnfo Themenstarter:in
20 Beiträge seit 2017
vor 5 Jahren

vielen Dank euch beiden für den Tipp.

Habt ihr eventuell eine Kurzanleitung parat, wo man in die Verwendung des Profilers eingeführt wird? Habe soetwas noch nie gemacht.

Kann ich das außerdem für mehrere Benutzer machen? Oder reicht es den Test einmal zu machen?

709 Beiträge seit 2008
vor 5 Jahren

Profiling in Visual Studio
Beginners Guide to Performance Profiling

(Der zweite Link ist korrigiert. Danke für den Hinweis, witte. =)){gray}

W
955 Beiträge seit 2010
vor 5 Jahren

@pinki: die beiden Links sind identisch.

L
Limnfo Themenstarter:in
20 Beiträge seit 2017
vor 5 Jahren

Ich verwende momentan noch VS2013. Dort habe ich folgende Optionen zur Auswahl:*CPU-Sampling *Messung (Funktionsaufrufzahl + zeitliche Steuerung) *.NET Speicherbelegung *Ressourcenkonfliktdaten (Nebenläufigkeit)

Habe mal das CPU-Sampling sowohl mit dem User "Franz" als auch mit dem User "Administrator" gemacht. Dafür habe ich, wie im Tutorial angegeben, am Beginn und am Ende der Paint-Methode einen Haltepunkt gesetzt.
Aus dem Sampling geht für mich hervor, dass die CPU-Auslastung als "Administrator" geringer ist, als als "Franz". Im Anhang sende ich beide Diagramme mit, oben "Franz", unten "Administrator".

Als Funktion, welche die meisten Einzelaufgaben ausführt, wird
System.Drawing.Graphics.FillRectangle(System.Drawing.Brush, float32, float32, float32, float32)
mit 84% (in- und exklusive Samplings) angegeben.

Was bzw. wie kann/soll ich noch testen, um die notwendigen Infos zu bekommen?

L
Limnfo Themenstarter:in
20 Beiträge seit 2017
vor 5 Jahren

Bezüglich Gefühl...
Wir haben das Programm in den letzten Wochen auf 5 unterschiedlichen PCs (alle Windows 7) laufen lassen, dort jeweils als "Franz" und als "Administrator". Vier Leute bei uns haben alle bestätigt, dass es als "Franz" langsamer zeichnet...
Mir ist aber klar, dass viele subjektive Meinungen immer noch nicht objektiv sind.

Bin jedenfalls sehr interessiert und dankbar, falls wir eine Lösung finden können!

5.658 Beiträge seit 2006
vor 5 Jahren

Hi Limnfo,

als erstes brauchst du eine vernünftige Test-Umgebung. Du mußt sicherstellen, daß in beiden Profilen jeweils der gleiche Code durchlaufen wird mit den gleichen Parametern und in der gleichen Anzahl (möglichst oft!).

Dann mußt du herausfinden, welche Methodenaufrufe wieviel Zeit benötigen, und welche sich am meisten unterscheiden. Wie das funktioniert, findest du in den Anleitungen für den jeweiligen Profiler. Alles, was auf Gefühlen basiert, hat in diesem Zusammenhang keinerlei Aussagekraft.

Und dann mußt du herausfinden, wie sich die Profile von Franz von Administrator unterscheiden. Wird die gleiche Bildschirmauflösung verwendet? Gibt es Software, die im Hintergrund läuft, bzw. Malware?

Weeks of programming can save you hours of planning

L
Limnfo Themenstarter:in
20 Beiträge seit 2017
vor 5 Jahren

Hi MrSparkle,

danke vorerst für die Antwort.
wie kann ich mir eine solche Test-Umgebung einrichten?
Muss ich dafür ein Programm schreiben, was das Problem-Programm dann "bedient"?

Über das Problem-Programm kann ein User eine Datei laden, welche jene Daten enthält, die dargestellt werden sollen - dieser Schritt ließe sich automatisieren.
Das Zeichnen der Inhalte, bzw. das neu-Zeichnen des Panels, welches durch horizontales Scrollen verursacht wird, ließe sich vermutlich auch automatisieren...
Wäre das ausreichend?
Falls ich das soweit automatisieren könnte, müsste ich das jeweils im Profiler durchlaufen und die Ergebnisse speichern - korrekt?

Bei den bisherigen "gefühlten" Tests, waren alle Parameter ident: Bildschirmauflösung, Bildschirmgröße, Fenstergröße, laufende Software,...
Zwei der PCs, die zum Testen herangezogen wurden, haben exakt die gleiche Hardware verbaut und nach der Neu-Installation des ersten PCs wurde die Festplatte gespiegelt und auf den zweiten PC übertragen. Malware o.ä. kann ich ausschließen.

Was mir in der Zwischenzeit noch eingefallen ist: kann es sein, dass Windows dem "Administrator"-Account standardmäßig mehr Ressourcen (CPU/GPU) zur Verfügung stellt und deshalb das Zeichnen schneller läuft?

L
Limnfo Themenstarter:in
20 Beiträge seit 2017
vor 5 Jahren

Hallo Zusammen!

könnte mir bitte jemand weiterhelfen, wie man eine Test-Umgebung erstellen kann, mit der sich die von mir beschriebene Problematik testen/messen lässt? Mir wäre wirklich an der Lösung des Problems gelegen und ich bin für jede Hilfe dankbar!

Limnfo

5.658 Beiträge seit 2006
vor 5 Jahren

Woran scheitert es denn genau? Du weißt du, was du messen willst, und du weißt, welche Werkzeuge du dazu zur Verfügung hast. Du mußt halt nur dafür sorgen, daß bei jeder Messung genau gleichen Operationen in genau der gleichen Reihenfolge ausgeführt werden, und die Meßbedingungen jedesmal die gleichen sind.

Weeks of programming can save you hours of planning

L
Limnfo Themenstarter:in
20 Beiträge seit 2017
vor 5 Jahren

Wie kann ich eine Testumgebung für verschiedene User erstellen?
Ich möchte ja nicht nur den Programmablauf automatisieren, sondern ebenfalls auch messen, ob der Programmablauf bei verschiedenen Usern auch unterschiedlich lange dauert...

2.298 Beiträge seit 2010
vor 5 Jahren

Wie meinen? Du erstellst halt unterschiedliche Nutzer mit unterschiedlichen Rechteebenen. Je Nutzer lässt du dann einmal das Programm laufen. - Natürlich mit gleichen Voraussetzungen, d.h. im Hintergrund laufen auch die gleichen Prozesse ab.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

L
Limnfo Themenstarter:in
20 Beiträge seit 2017
vor 5 Jahren

Sorry, habe mich unklar ausgedrückt.
Ich meinte eigentlich, wie ich bei verschiedenen Usern "messen"/testen kann.

Ich würde also mein Programm soweit umschreiben, dass es automatisch Daten lädt, verarbeitet und darstellt. Wie ich den Zeitbedarf hierfür in meiner Programmierumgebung unter dem User1 messen kann ist mir klar.
Aber wie mache ich das bei User2 - User4? Muss ich dort ebenfalls eine Programmierumgebung einrichten?

16.841 Beiträge seit 2008
vor 5 Jahren

Wir sprechen hier doch nur von Impersonation der User? Nicht?

Prinzipiell lässt sich Software Performance auch super (einfach) analysieren, wenn Du den Code so geschrieben ist, dass er (mit Hilfe von UnitTests und/oder UI Tests) testbar ist.
Sprich, Du einen sauberen, modularen Aufbau hast, der Grundprinzipien wie Dependency Injection und Co erfüllt.

[Artikel] Unit-Tests: Einführung in das Unit-Testing mit VisualStudio

Du brauchst ne ordentliche Testumgebung.
Es gibt natürlich Systemeinstellungen, die evtl. Franz vorgenommen hat, die keiner hier kennen kann.
zB wenn der Rechner eine GPU + Integrierte GPU hat und der eine User auf der GPU rendert und der andere auf der integrierten GPU.
(Nur als Beispiel; WinForms basiert auf GDI+ und daher wird eh alles auf der CPU gerendert)

L
Limnfo Themenstarter:in
20 Beiträge seit 2017
vor 5 Jahren

Der Code ist absolut nicht mittels UnitTests testbar.
Bin gerade erst dabei mich in UnitTests einzuarbeiten, das Programm ist aber vergleichsweise alt und zu umfangreich, um es auf die schnelle umzuschreiben. Danke aber für den Link!

Jedenfalls, um überhaupt wieder auf einen grünen Zweig zu kommen:
Die kollektive Vermutung der bisherigen Antworten ist also die, dass es ein Fehler im Code sein muss. Dieser wäre mittels Testumgebung/UnitTests etc. aufzufinden und auszumerzen.
ODER es liegt an unterschiedlichen Hintergrundprogrammen/Systemeinstellungen zw. den untersch. Nutzern - dann würde selbst diese Art zu testen nichts bringen, korrekt?

Des weiteren sind meine Vermutungen, dass es zB. innerhalb von WinForms/GDI+ Unterschiede zw. den Usern "Administrator" (Gruppe Administratoren) und "Franz" (Gruppe Benutzer) gibt, gemäß der bisherigen Antworten ebenfalls falsch, korrekt?

Wenn die Antwort auf meine zwei Fragen also jeweils "ja" ist, dann steht mir eine lange Ursachensuche bevor, ohne zu wissen, ob es ein Code-Fehler oder eine Systemeinstellung o.ä. ist...

16.841 Beiträge seit 2008
vor 5 Jahren

Des weiteren sind meine Vermutungen, dass es zB. innerhalb von WinForms/GDI+ Unterschiede zw. den Usern "Administrator" (Gruppe Administratoren) und "Franz" (Gruppe Benutzer) gibt, gemäß der bisherigen Antworten ebenfalls falsch, korrekt?

Vernünftig nachgedacht: wenn es das geben würde, wäre es anderen Leuten wahrscheinlich schon aufgefallen.
Viele CAD Anwendungen, die sehr grafisch rechenintensiv sind, arbeiten immer noch mit GDI+ - und da sitzen wirkliche Grafikprofis dahinter, denen das aufgefallen wäre.

Die Wahrscheinlichkeit, dass es hier wirklich ein Fehler geben dürfte, ist äußerst gering.
Fällt mir sehr sehr schwer daran zu glauben.

dann steht mir eine lange Ursachensuche bevor, ohne zu wissen, ob es ein Code-Fehler oder eine Systemeinstellung o.ä. ist...

Genau deswegen wurde Dir mehrfach gesagt: geh systematisch vor.