was ist schneller -> fwrite

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • was ist schneller -> fwrite

    Hi Leute!

    Kurze Frage, vielleicht hat ja jemand Erfahrung damit, hab jetzt keine Testdatensätze und keine Zeit, mir welche zu erstellen.
    Es geht um die Performance, sprich: was ist in Hinsicht auf Performance (Zeit und Speicherbedarf) besser?

    Ich schreibe mittels fwrite und einer Schleife Daten in eine Datei. Welche Variante würdet ihr vorziehen?

    1) Zuerst alle Zeilen in einen String (while Schleife mit .= ), zum Schluss dann die gesamte Variable mit fwrite in die Datei. Möglicher Nachteil: die Variable wird u.U. sehr groß

    2) In der while-Schleife selbst jedes Mal fwrite aufrufen

    Danke, lG
    Bernie

  • #2
    ich würde auf 1 tippen. trotzdem kommst du ums testen nicht herum.
    um welche datenmengen geht es denn?

    Kommentar


    • #3
      Würd mal sagen zwischen 500 und 1500 Zeilen mit einer Länge von durchschnittlich 60-70 Zeichen pro Zeile, also gesamt würd ich meinen so 40-100kB.

      Testen tu ich schon, keine Frage, aber im Moment nicht mit Datenmengen, wo sich das in der Performance niederschlagen würde (wenns das überhaupt bei solchen Datenmengen tut).

      Kommentar


      • #4
        In den Größenordnungen mußt du über Performanceunterschiede nachdenken? Wie oft pro Sekunde soll diese Aktion denn stattfinden?

        Kommentar


        • #5
          Original geschrieben von deltacon
          Testen tu ich schon, keine Frage, aber im Moment nicht mit Datenmengen, wo sich das in der Performance niederschlagen würde (wenns das überhaupt bei solchen Datenmengen tut).
          Naja, wenn die datenmengen zu klein sind, wiederhole den vorgang einfach so oft, bis du in erkennbare zeiträume kommst.
          ggf in mehreren threads parallel.

          Wenn man das ganze low-level betrachtet, hast du weniger festplatten schreibzugriffe, du musst also weder die stelle suchen, noch schreiben noch die kopf einstellen usw. von daher ist rein technisch einmal schreiben deutlich schneller.
          die tatsache, dass der string grösser wird, sollte das nicht aufwerten können, vor allem wenn man bedenkt, das du letzendlich ansonsten jedes mal einen funktionsaufruf hast ( fwrite ) oder langsamer sein sollte, als stringverknüpfung ( "interne funktion" =>optimiert bzw schneller ( hoffentlich -.- ))

          insgesamt denke ich als auch, das die software seite ebenfalls im falle 1) günstiger steht. somit bin ich auch der meinung 1) sollte performanter sein.
          aber dies kannst du wie gesagt auch selbst nachvollziehen

          Kommentar


          • #6
            Danke für eure Antworten!

            Ich "tweake" sehr gerne und versuche überall das letzte Quentchen an Performance rauszuholen (auch wenns statt 0,6s nur 0,4s dauert) - irgendwo summiert sich das dann immer erfahrungsgemäß.

            Außerdem haben mich eure Erfahrungen / Meinungen dazu interessiert.

            Das Ganze wird eine Exportschnittstelle.

            Bzgl. Testen: bin im Moment bissl in Zeitdruck, werds irgendwann mal mit großen Datenmengen testen.

            lG
            Bernie

            Kommentar


            • #7
              Original geschrieben von shapeless
              Wenn man das ganze low-level betrachtet, hast du weniger festplatten schreibzugriffe, du musst also weder die stelle suchen, noch schreiben noch die kopf einstellen usw. von daher ist rein technisch einmal schreiben deutlich schneller.
              Das wiederum hängt vom Filesystem, Disktreiber und -firmware ab. Ein optimaler Bulk-Write-Cache wartet diese Mikrosekunden der einzelnen fwrite-Aufrufe ab, bis einer oder ein ganzer Bulk von Blöcken mit einem Mal geschrieben werden kann und muß, wenn genügend zusammenhängender Platz verfügbar ist, auch den Kopf nur einmal positionieren. Okay, die meistgebräuchlichen Platten arbeiten nicht so oder nur in den Grenzen eines Blockes ohne konkurrierende Zugriffe etc. Aber damit ist auch klar, dass das Optimum vom jeweiligen System abhängt und Testen wirklich unumgänglich ist.

              Kommentar

              Lädt...
              X