Leerlaufzeiten des Prozessors ausnutzen

Hallo Wisssende,

in der FAQ:3000 steht ja guter Code mit dem man Festplatten nach Dateien bzw. deren Inhalten durchsuchen lassen kann.
Codebedingt braucht das halt bei vielen Dateien viel Zeit.

Jetzt gibt es, auch als Freeware, Suchprogramme wo das Ergebnis fast wie in Echtzeit erscheint. D.h. kaum auf „Suchen“ geklickt ist das Ergebnis schon da.
Hier ist ein Beispiel:
http://www.wintotal.de/yad/?rb=45&id=2422

Das funktioniert so daß diese Programme einmalig die Festplatten scannen und einen Index o.ä. erstellen.
Dann warten sie im „Hintergrund“ bis der Prozessor wieder Leerlauf hat und aktualisieren ihren „Index“

Wenn man nun nach Dateiinhalten sucht, so werden nicht alle Dateien durchgelesen sondern nur der „Index“, das geht blitzschnell.

Jetzt mal so gefragt, könnte man aus der FAQ:3000 eine exe basteln die das Gleiche leistet?
Also einmalig alle Dateien einlesen, daraus dann einen "Index erstellen und den in Leerlaufzeiten des Prozessors aktualisieren?

Meine Wortwahl „Index“ mag völlig falsch sein, ich hoffe ich konnte micht trotzdem verständlich machen was ich meine.

Danke für das Interesse
Gruß
Reinhard

Hallo Reinhard,

Jetzt mal so gefragt, könnte man aus der FAQ:3000 eine exe
basteln die das Gleiche leistet?

Die Resultate muss man in eine Datei speichern, dann muss man schon mal nicht jedes mal alle Dateien neu durchforsten.

Der nächste, einfache Schritt, wäre die Priorität des Tasks herunter zu setzen.

Noch effizienter wird es, wenn man sich ins Dateisystem mit reinhängt und bei jeden Schreibzugriff auf eine Datei diesen Index als ungültig markiert. Man kann dann auch erkennen, wenn eine Datei gelöscht wird und diesen Eintrag dann auch entfernen.
Dann kann man entweder im Hintergrund diese Indexe updaten oder muss dies bei einer Abfrage sofort ausführen, allerdings gezielt nur auf den geänderten Dateien.

MfG Peter(TOO)

Hallo Peter,

Jetzt mal so gefragt, könnte man aus der FAQ:3000 eine exe
basteln die das Gleiche leistet?

Die Resultate muss man in eine Datei speichern, dann muss man
schon mal nicht jedes mal alle Dateien neu durchforsten.

ja, was nun in dieser Index-datei genau stehen muß ist mir noch nicht klar, aber das kann man ja rauskriegen.
Mich hat sehr die Schnelligkeit dieser Suchprogramme verblüfft die Indexdateien anlegen und pflegen.

Nur haben sie ein Problem, Text finden sie aber Zahlen nicht in Exceldateien.
Wenn in einer Excelzelle
abc
steht, so wird das gefunden.
Steht dort aber
111.222.333
wird das nicht gefunden, denn Excel speichert das innerbetrieblich anders ab.
In dem Fall als
111222333
, das wird dann gefunden.

Durch eine diesbezügliche Anfrage hier irgendwo in w-w-w stiess ich auf diese Problematik.
Da ich an den fertigen Such-Programmen nix ändern kann dachte ich mir, ob man nicht FAQ:3000 umschreiben kann sodaß auch Zahlen wie 111.222.333 gefunden werden.

Den Code umzuschreiben traue ich mir zu. Nur, bei einer oder mehreren Festplatten läuft das Programm dann sehr lange.
Deshalb meine grundsätzliche Anfrage hier ob es mit VB möglich ist, auch einmalig, egal wie lange es dauert, so eine Indexdatei zu basteln und diese dann in Leerlaufzeiten o.ä. zu aktualisieren.

Der nächste, einfache Schritt, wäre die Priorität des Tasks
herunter zu setzen.

Runter? Ich denke eher rauf. Der task, also mein noch gar nicht existierendes Programm soll ja sofort wenn Leerlauf ist, prüfen ob sich an den dateien was änderte und die Indexdatei(en) aktualisieren.
Okay, Kenntnis vom Taskmanagment habe ich Null.

Noch effizienter wird es, wenn man sich ins Dateisystem mit
reinhängt und bei jeden Schreibzugriff auf eine Datei diesen
Index als ungültig markiert. Man kann dann auch erkennen, wenn
eine Datei gelöscht wird und diesen Eintrag dann auch
entfernen.
Dann kann man entweder im Hintergrund diese Indexe updaten
oder muss dies bei einer Abfrage sofort ausführen, allerdings
gezielt nur auf den geänderten Dateien.

Meinst du das geht mit VB?

Gruß
Reinhard

Hallo Reinhard,

Der nächste, einfache Schritt, wäre die Priorität des Tasks
herunter zu setzen.

Runter? Ich denke eher rauf. Der task, also mein noch gar
nicht existierendes Programm soll ja sofort wenn Leerlauf ist,
prüfen ob sich an den dateien was änderte und die
Indexdatei(en) aktualisieren.
Okay, Kenntnis vom Taskmanagment habe ich Null.

Das merkt man :wink:

Etwas vereinfacht.

Hohe Priorität:
Sobald der Task die CPU beschäftigen kann, bekommt er sie. Alle Tasks mit geringerer Priorität werden verdrängt.
Eine Endlosschleife in einem soclhen Task legt also das ganze System lahm, weil der Task ja immer Arbeit für die CPU hat.

Niedrige Priorität:
Der Task bekommt nur die „Restzeit“ zugeteilt. Er steht also ganz unten in der Hierarchie und bekommt nur dann die CPU, wenn sie kein Anderer benötigt.
Der „Leerlaufprozess“ hat die niedrigste Priorität im ganzen System.

MfG Peter(TOO)

Hallo Peter,

Okay, Kenntnis vom Taskmanagment habe ich Null.

Das merkt man :wink:

tja nun, huste mal ohne Hals :smile:)

Etwas vereinfacht.

Sehr guter Ansatz *lob*

Jetzt stimme ich dir zu, also niedrigste Priorität.

Und wie mache ich das nun in VB?

Gruß
Reinhard, neuerdings Taskmanagmentspezialist *lächel*

Hallo Reinhard,

puh nun hast du etwas angesprochen.
Also das mit den Text suchen in Files, da hatte ich hier mal eine Änderung gepostet, die sich Rainer mal anschauen sollte und dann ggfls. die FAQ ändern sollte, so das das da auch geht. Das war kein all zu grosser Aufwand gewesen :wink:

So nun noch einmal fix zu der Sache mit den Prioritäten. Also wie du weisst geht das schon einmal um Threads! Das heisst wiederrum du musst unter VB einen Thread erstellen!

Dabei faengt es aber schon an. VB bis zur Version 6 sollen da ab und wann mal Probleme machen ( Hab ich irgendwo mal gelesen / gehört). Ok, ich habe es einmal gemacht und es lief anstandslos.

Aber zurueck zum Thema.

Einen Thread kannst du via der API

CreateThread 

erstellen.
Einschlaefern, also anhalten kannst du ihn mittels der API

SuspendThread

Aufwecken kannst du den eingeschlaeferten Thread mit der API

ResumeThread

Beenden kannst du aktuellen Thread mittels der API

ExitThread

Jeden Thread kannst du nun eine Priorität zuweisen! Das machst du mit der API

SetThreadPriority

Wenn du nun die ThreadPriorität ändern möchtest, so musst du der API sagen welche Priorität gesetzt werden soll.

Schau mal hier, da ist alles fein erklärt :wink:

http://runtime-basic.net/Windows-API:smiley:ata:kernel32.d…

MfG Alex

Hallo Reinhard,

Und wie mache ich das nun in VB?

Etwas rumspielen kann man schon mit dem Task-Manager, da kann man an der Priorität rumspielen. Notfalls muss man halt neu booten :smile:

Ansonsten ist es ein API Aufruf, aber frag nicht welcher …

Unter Windows hab ich’s erst 1 oder 2 mal benötigt. Und da wo ich es dauernd benötige, hab ich das BS selber geschrieben :wink:

MfG Peter(TOO)

Hallo Alex,

puh nun hast du etwas angesprochen.

*gg*, wenn ich hier was nachfrage ist oft im Grenzbereich oder darüber von VB.

Also das mit den Text suchen in Files, da hatte ich hier mal
eine Änderung gepostet, die sich Rainer mal anschauen sollte
und dann ggfls. die FAQ ändern sollte, so das das da auch
geht. Das war kein all zu grosser Aufwand gewesen :wink:

Ja, *erinner*, pöser Rainer :smile:

Aber, dann wird Text gefunden, Excel, vielleicht auch Access, ist da eigen bei Zahlwerten, die sind nicht so einfach zu finden.
Ich habe das Programm wo ich den Link dazu zeigte getestet und noch ein ähnliches.
Bei Zahlwerten in Excel versagten sie beide. Das liegt an Excel, wenn du da in eine Zelle eingibst 111.222.333 so finden die Programme 111222333 aber nicht 111.222.333.
Bei Datümern wird das so ähnlich ablaufen da du zwar in der Zelle siehst 01.Jan.2009, aber abgespeichert wird dies als 40183,6892749.
Das bedeutet, der 40183te Tag nach dem 1.1.1900, die Nachkommastellen verbergen die Uhrzeit.

Schau mal hier, da ist alles fein erklärt :wink:

http://runtime-basic.net/Windows-API:smiley:ata:kernel32.d…

Werde ich tun.

Gruß
Reinhard