<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Verständnisfrage]]></title><description><![CDATA[<p>Hallo,<br />
ich habe mir ein kleines Prog. geschrieben, das X Zeichen aus einer Datei einliest, bearbeitet und wieder in einer anderen Datei speichert.<br />
theoretisch läuft es also folgendermaßen ab:</p>
<pre><code>while (noch nicht die ganze datei eingelesen)
{
readdatei öffnen
X Zeichen aus readdatei in c-string readstring speichern
readdatei schließen

daten nach c-string writestring kopieren//daten bearbeiten

writedatei öffnen
writestring schreiben
writedatei schließen
}
</code></pre>
<p>Das heißt, je kleiner X, desto öfter müssen die Dateien geöffnet und geschlossen werden --&gt; unnötiger CPU-Verbrauch<br />
Deshalb habe ich mir gedacht, dass man möglicht viele Daten einlesen sollte und habe spontan mal ein MiB genommen.<br />
mhh...<br />
irgendwie war das nicht gerade schnell...<br />
jetzt habe ich PRAKTISCH festgestellt, dass mein Prog. auf meinem PC am schnellsten arbeitet, wenn es ca. 600 B einliest.<br />
unter 64 B und über 64 KiB wird es unerträglich langsam (rapide!!!)<br />
Kann mir jemand sagen weshalb?<br />
RAM hab ich genug.<br />
meine c-strings sind dynamisch angelegt</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/268533/verständnisfrage</link><generator>RSS for Node</generator><lastBuildDate>Tue, 01 Sep 2026 17:52:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/268533.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 10 Jun 2010 14:34:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verständnisfrage on Thu, 10 Jun 2010 14:34:23 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe mir ein kleines Prog. geschrieben, das X Zeichen aus einer Datei einliest, bearbeitet und wieder in einer anderen Datei speichert.<br />
theoretisch läuft es also folgendermaßen ab:</p>
<pre><code>while (noch nicht die ganze datei eingelesen)
{
readdatei öffnen
X Zeichen aus readdatei in c-string readstring speichern
readdatei schließen

daten nach c-string writestring kopieren//daten bearbeiten

writedatei öffnen
writestring schreiben
writedatei schließen
}
</code></pre>
<p>Das heißt, je kleiner X, desto öfter müssen die Dateien geöffnet und geschlossen werden --&gt; unnötiger CPU-Verbrauch<br />
Deshalb habe ich mir gedacht, dass man möglicht viele Daten einlesen sollte und habe spontan mal ein MiB genommen.<br />
mhh...<br />
irgendwie war das nicht gerade schnell...<br />
jetzt habe ich PRAKTISCH festgestellt, dass mein Prog. auf meinem PC am schnellsten arbeitet, wenn es ca. 600 B einliest.<br />
unter 64 B und über 64 KiB wird es unerträglich langsam (rapide!!!)<br />
Kann mir jemand sagen weshalb?<br />
RAM hab ich genug.<br />
meine c-strings sind dynamisch angelegt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1910089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1910089</guid><dc:creator><![CDATA[sudo rm -rf]]></dc:creator><pubDate>Thu, 10 Jun 2010 14:34:23 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage on Thu, 10 Jun 2010 14:40:45 GMT]]></title><description><![CDATA[<p>[quote=&quot;sudo rm -rf&quot;]Hallo,<br />
ich habe mir ein kleines Prog. geschrieben, das X Zeichen aus einer Datei einliest, bearbeitet und wieder in einer anderen Datei speichert.<br />
theoretisch läuft es also folgendermaßen ab:</p>
<pre><code>while (noch nicht die ganze datei eingelesen)
{
readdatei öffnen
X Zeichen aus readdatei in c-string readstring speichern
readdatei schließen

daten nach c-string writestring kopieren//daten bearbeiten

writedatei öffnen
writestring schreiben
writedatei schließen
}
</code></pre>
<p>Mach draus</p>
<pre><code>readdatei öffnen
writedatei öffnen
while (noch nicht die ganze datei eingelesen)
{
X Zeichen aus readdatei in c-string readstring speichern

daten nach c-string writestring kopieren//daten bearbeiten

writestring schreiben
}
writedatei schließen
readdatei schließen
</code></pre>
<p>und alles wird gut.<br />
Der Performance sollte dann bei Schreibaufträgen zwischen 4k und 64k optimal sein, mit kaum messbaren einbußen bei noch größeren Aufträgen, aber bei unter 1k wirds schon langsam bemerkbar bis runter zu Bytegroßen Mini-Aufträgen, wo der Rechner sich schämen sollte, wie langsam er auf einmal ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1910094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1910094</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 10 Jun 2010 14:40:45 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage on Thu, 10 Jun 2010 15:21:58 GMT]]></title><description><![CDATA[<p>ja, so ähnlich hatte ich es zu erst.<br />
der nachteil finde ich ist aber, dass permanent die dateien geöffnet sind.<br />
wenn der strom ausfällt oder sonstiges kann man die dateien doch dann vergessen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1910116</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1910116</guid><dc:creator><![CDATA[sudo rm -rf]]></dc:creator><pubDate>Thu, 10 Jun 2010 15:21:58 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage on Thu, 10 Jun 2010 15:24:39 GMT]]></title><description><![CDATA[<p>Wieso willst du die Datei schließen, wenn du sie im nächsten Schritt bearbeiten willst? Das ist der Grund, warum deine Programm so langsam wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1910117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1910117</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Thu, 10 Jun 2010 15:24:39 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage on Thu, 10 Jun 2010 15:42:03 GMT]]></title><description><![CDATA[<p>sudo rm -rf schrieb:</p>
<blockquote>
<p>ja, so ähnlich hatte ich es zu erst.<br />
der nachteil finde ich ist aber, dass permanent die dateien geöffnet sind.<br />
wenn der strom ausfällt oder sonstiges kann man die dateien doch dann vergessen, oder?</p>
</blockquote>
<p>Sicherung gegen Stromausfall?<br />
Mußt Du wirklich jedes Byte absichern? Mals abgesehen vom Betriebssystemcache, mehr als 4k Verlust am Ende gibts eh nicht, denn der ofstream-Puffer schreibt sich immer raus, wenn er voll wird.</p>
<p>Falls Du jede Zeile auf die Platte gegen Stromausfall sichern mußt, geht es nicht schnell. Nur wenige hundert Zeilen pro Sekunde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1910137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1910137</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 10 Jun 2010 15:42:03 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage on Thu, 10 Jun 2010 17:02:59 GMT]]></title><description><![CDATA[<p>Zeus schrieb:</p>
<blockquote>
<p>Wieso willst du die Datei schließen, wenn du sie im nächsten Schritt bearbeiten willst?</p>
</blockquote>
<p>Nun, weil ich die Originaldatei nicht überschreiben will, sondern eine zweite anlegen möchte.<br />
deswegen auch readdatei und writedatei</p>
<p>volkard schrieb:</p>
<blockquote>
<p>Falls Du jede Zeile auf die Platte gegen Stromausfall sichern mußt, geht es nicht schnell. Nur wenige hundert Zeilen pro Sekunde.</p>
</blockquote>
<p>naja, mein altes prog (wie in deinem beispiel) arbeitete mit 2,2 Mib/sek<br />
mein jetztiges mit 512 Byte Puffer leistet 1,9 MiB/sek</p>
<p>aber kann mir jemand sagen, weshalb es so derbe langsam wird, wenn ich 1MiB einlese, bearbeite und dann schreibe?<br />
Da ist mein 512 Byte Programm ohne zu übertreiben 100 mal schneller! eher noch schneller</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1910195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1910195</guid><dc:creator><![CDATA[sudo rm -rf]]></dc:creator><pubDate>Thu, 10 Jun 2010 17:02:59 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage on Fri, 11 Jun 2010 07:27:31 GMT]]></title><description><![CDATA[<p>naja, mein altes prog (wie in deinem beispiel) arbeitete mit 2,2 Mib/sek<br />
mein jetztiges mit 512 Byte Puffer leistet 1,9 MiB/sek</p>
<p>aber kann mir jemand sagen, weshalb es so derbe langsam wird, wenn ich 1MiB einlese, bearbeite und dann schreibe?<br />
Da ist mein 512 Byte Programm ohne zu übertreiben 100 mal schneller! eher noch schneller[/quote]</p>
<p>Ohne konkreten Quelltext geht jetzt das Rätselraten los. Bei einem Faktor von über 100 liegt die Vermutung nahe, dass der Algorithmus nicht optimal ist, sondern nur gutes Laufzeitverhalten für kleine Datenmengen hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1910431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1910431</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Fri, 11 Jun 2010 07:27:31 GMT</pubDate></item></channel></rss>