Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit ProcessMemory (https://www.delphipraxis.net/108898-problem-mit-processmemory.html)

OldGrumpy 22. Feb 2008 10:55

Re: Problem mit ProcessMemory
 
Zitat:

Zitat von Lord Shadow
Ok der Alrotihmus müste nun funktionieren mir ist klar warum so ein Salat ruaskam.

Aber die Geschwindigkeit läst sehr zu wünschen übrig -.-
[...]
Wie könnte man das schneller bekommen?

Indem Du erstmal beschreibst, was der "Alrotihmus" (erinnert mich spontan an Harry Potter...) überhaupt tun soll. :) Die Art und Weise wie Du da durch den Speicher pflügst ist extrem ineffizient...

Ändere als erstes mal Deine komische Winzig-Buffersize von 100 zu 4096 (page size) oder 65536 (fsmapsize), ReadProcessMemory ist relativ langsam weil es eine Menge Arbeit auf Kernel-Ebene bedeutet. 4096 ist die übliche Größe einer Speicherseite (memory page), das sind die kleinsten Elemente die jeweils einzeln gemappt werden. Indem du jedes Mal nur 100 Bytes liest, verursachst Du also knapp vierzigfachen Overhead beim Speicherzugriff...

Desweiteren ist die Frage, nach was für Strings du suchst. Sind die nullterminiert oder längenbestimmt? Du suchst Dir ja ohne Rücksicht auf Verluste nur Ascii-Zeichen aus dem Speicher. Logisch dass da viel Blech bei rumkommt.

Lord Shadow 22. Feb 2008 12:16

Re: Problem mit ProcessMemory
 
Danke für den Tipp mit der Size werden ich noch probieren ;) Mir ist auch wurscht ob ich nur nach Strings durchpflüge. Es funktioniert nun wunderbar auch relativ schnell nachdem ich mal geschaut habe welchen Typ der Speicher hat wo die Zieldaten drin stehen. Es war Private und wenn ich nur diese Betrachte sind es nur noch ca. 25 Offsetberreiche.

Aber nur mal als Zusatzinformation, wie erkenne ich Strings im Speicher? Ich hab gehört sie enden mit #0 aber wie fangen sie an :)

Mfg Shadow

sirius 22. Feb 2008 12:23

Re: Problem mit ProcessMemory
 
Du erkennst sie gar nicht. Das mit dem #0 wäre zwar ein Indiz, aber sehr unsicher. Du könntest natrülich mit dem Code durch eine Art Rechtschreibprüfung gehen und dadurch erkennen, wo Textstellen sind. Aber generell ist nix markiert als irgend ein Datentyp. Da stehen immer nur 0 und 1. Was es sein soll, ist eine Frage der Interpretation. Und die gestaltest du als Programmierer. Im ausführbaren Code ist sie aber nicht mehr zu erkennen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz