x64 und Context Menu - mal wieder

German support forum

Moderators: Hacker, Stefan2, white

User avatar
Tahattmeruh
Senior Member
Senior Member
Posts: 244
Joined: 2003-05-16, 13:35 UTC

Post by *Tahattmeruh »

Funktioniert auch unter Vista x64 super.
Danke. Das erleichter die Arbeit.
User avatar
Tahattmeruh
Senior Member
Senior Member
Posts: 244
Joined: 2003-05-16, 13:35 UTC

Post by *Tahattmeruh »

Mir ist gerade bei vielen Dateien etwas aufgefallen.
Ich habe in einem Verzeichnis in einem Netzwerkshare
ca. 5000 Dateien.
Davon markiere ich 500 und ruf das Menü auf.
a) dauert es ziemlich lange. In der Zeit sehe ich in der Taskleiste das Programm.
b) Beim ersten mal kommt aber trotzdem nie das Menü. Ich muß immer erst ein zweites mal das Menü aufrufen.

Hast du vielleicht eine Idee wie ich das beschleunigen kann?
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

An dem Quelltext kann ich da glaube nicht viel machen (ausser die Wartezeit mit einem Wait-Cursor verschönern).

Da sind mehrere Faktoren im Spiel bei denen man allerdings ansetzten könnte um eine Beschleunigung zu erreichen.

:arrow: A) Die typische JIT (Just In Time)-Compiler Startverzögerung von .Net Assemblies in den System/Autostart Zeitraum verlegen.
Also: ExplorererMenu4TC bereits im Autostart mit dem Namen eines nicht existierenden Files als Übergabeparameter aufrufen.
Dadurch würde sich die Wartezeit des ersten Aufrufs aus dem TC heraus etwas verkürzen.

Der erste Aufruf kann auch schon mal etwas länger
dauern (ca. maximal 5 Sekunden für das Laden der .Net Assemblies/Umgebung).
Falls Du beim ersten Aufruf eine deutlich grössere Verzögerung feststellst, liegt es vielleicht auch daran, das dein physikalischer Speicher bereits zu mehr als 100% in Benutzung ist (Auslagerung/Paging-Vorgänge).

:arrow: B) Überflüssige ShellContextMenuHandler deaktivieren:
NirSoft shexview
Direkter Download-Link der 64Bit version


Jede per Registry angemeldete ShellContextMenu-Erweiterung bekommt beim Initialize() Aufruf eine Itemliste mit allen markierten Files überreicht.
Der Rückgabewert dieses Aufrufs entscheidet ob diese ShellExtension anschließend im Kontextmenu auftaucht.

Was mit dieser Liste gemacht wird, hängt von der Implementierung der ContextMenuHandler-Shellextension ab. Es kann durchaus sein, dass eine ShellExtension erst mal alle Files öffnet und anhand des Inhalts entscheidet, ob sie zuständig ist, oder sich merkt, welche Menüeinträge inhaltsabhängig angeboten werden sollen.

Das dauert dann natürlich über Netzwerk und evtl. zusätzlichem Virenscanner deutlich länger als auf der lokalen Festplatte. ShellExtensions von M$ sind da eher unkritisch. Kritisch sind eher die Shellerweiterungen, die sich mehr oder weniger für jeden Dateityp anbieten.

Wie lange dauert denn bei dir "ziemlich lange" (insbesondere beim zweiten Aufruf eines Kontextmenues)?
Bei 200 Dateien auf einem schnellen Netzwerk würde ich so mit ca 2-5 sec Verzögerung bis zum Aufbau des Menües rechnen.

Gruß,
Holger
User avatar
Tahattmeruh
Senior Member
Senior Member
Posts: 244
Joined: 2003-05-16, 13:35 UTC

Post by *Tahattmeruh »

Ich hab keine überflüssigen Handler. Das hatte ich schon gecheckt.
Und mit JIT hat das auch nichts zu tun.

ExplorererMenu4TC ist schon am laufen.
Ich markiere 500 Dateien und ruf das Menü auf.
Dann passiert eben nichts, außer daß ExplorererMenu4TC in der Taskleiste erscheint nach ein paar Sekunden und auch auf dem Desktop. Ich kann warten solange ich will, es passiert nichts mehr.
Ruf ich im TC dann ExplorererMenu4TC noch einmal auf, dann erscheint auch das ContextMenu.
Wenn ich 500 andere Dateien auswähle, dann geht das Spiel wieder von vorne los.
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Sorry, dann habe ich etwas missverstanden.
Ich hatte diese Woche mal 1000 Dateien auf einem UNC Netzwerkpfad getestet und habe eigentlich keine wirklich gravierende Verzögerung festgestellt.

Wie lautet denn der Pfad, in dem die Dateien liegen?
Ist das evtl. ein virtuelles Verzeichnis unterhalb von \\Desktop?
Das wird nicht klappen.

Versuch es doch mal anstelle dessen über die Netzwerkumgebung.

Gruß,
Holger
Post Reply