Effektiv Log-File lesen mit wenig Latenz und Last ... ?



  • Hintergrund:

    Ich hab nen prozess, dessen Code kann und darf ich ned modifizieren, ich muss aber daten von dem auswerten. Das einzige wo der aber Infos ausspuckt, iss nen logfile.

    Die menge an daten die er schreibt iss ned so wild (1-10 kb/s max). Meine Vorgaben sind aber "wenig Latenz" und wenig "Performance fressen".

    Ich muss also auf gewisse Passagen in dem Logfile reagieren und dann gewisse aktionen recht zeitnah anstossen. Soweit die Theorie.

    Momantan hab ich folgenden ansatz:
    Mit CreateFile hole ich mir nen FilaHandle fuer den lesenden Zugriff.
    Dann les ich mit ReadFile ...
    wenn ich EOF bekomme, wart ich X-ms, danach schick ich ReadFile wieder los.
    Les ich was, geh ich gleich wieder los.
    Mein Problem iss nun:
    setz ich X auf 100 (ms) hab ich unguenstigsten fall 100 ms "Latenz" wenn der Prozess was schreibt worauf ich reagieren muss ... dafuer erzeug ich aber kaum Prozessorlast.
    setz ich X auf 1 oder so, hab ich bedeutend weniger Latenz, aber die prozessorlast die ich erzeug steigt enorm (1 Kern wird dann mit 30% belastet).

    Die Frage ist, wie loest man das eleganter ? Gibts da nen Weg ?
    Bekomm ich irgendwo nen event her, das mir gesetzt wird wenn neue Daten da sind ? so dass ich nimmer selber pollen muss ?
    Über das Directory kann ich mir nen Notifier fuer File ChangeEvents besorgen (FindFirstChangeNotification & co), aber gibts sowas nicht fuer nen File ? Iss das performant ?

    Wie löst ihr sowas ?

    Ciao ...



  • Es gibt glaub ich nen FileChange oder DirectoryChange Notification (auch über WinAPI). Bin gerade auf dem Sprung, kann dir leider kein Link schicken, google mal danach.



  • Sry gerade gesehen, dass du das schon beschrieben hast. Beitrag kann entfernt werden.


  • Mod

    Bei den Change Notifications gibt es doch auch eine Größenänderung. Die Frage ist wann, die beim OS ausgelöst wird.


Anmelden zum Antworten