<?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[Buffer für schreiben in Datei]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Feld von 320*240 ~ 75000 Float Werten. Diese sollen in einer Datei zwischengespeichert werden. Derweil wird jeder Wert einzeln in die Datei geschrieben, was natürlich ein riesiger Aufwand ist. Um diesen zu minimieren hatte ich überlegt zuerst einen Buffer anzulegen und diesen dann in die Datei zu schreiben.</p>
<p>Ich hatte da nun an einen der Streambuffer gedacht.<br />
Bzw. kann man einen Filebuffer anlegen und nachher einfach an die Datei übergeben?<br />
Gibt es bessere Alternativen?</p>
<p>Ich danke für jede Anregung.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/235232/buffer-für-schreiben-in-datei</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 05:42:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/235232.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 27 Feb 2009 10:33:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Buffer für schreiben in Datei on Fri, 27 Feb 2009 10:37:57 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Feld von 320*240 ~ 75000 Float Werten. Diese sollen in einer Datei zwischengespeichert werden. Derweil wird jeder Wert einzeln in die Datei geschrieben, was natürlich ein riesiger Aufwand ist. Um diesen zu minimieren hatte ich überlegt zuerst einen Buffer anzulegen und diesen dann in die Datei zu schreiben.</p>
<p>Ich hatte da nun an einen der Streambuffer gedacht.<br />
Bzw. kann man einen Filebuffer anlegen und nachher einfach an die Datei übergeben?<br />
Gibt es bessere Alternativen?</p>
<p>Ich danke für jede Anregung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1671148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1671148</guid><dc:creator><![CDATA[Bennnno]]></dc:creator><pubDate>Fri, 27 Feb 2009 10:37:57 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer für schreiben in Datei on Fri, 27 Feb 2009 10:41:20 GMT]]></title><description><![CDATA[<p>Das Betriebssystem buffert schon für dich und macht das im Zweifelsfall besser als wenn du das selber versuchst.</p>
<p>edit: Und wenn du tatsächlich für eine Plattform ohne Buffer programmierst (und nur dann), würde ich alles in einen stringstream schreiben und den dann regelmäßig in die Datei schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1671151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1671151</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 27 Feb 2009 10:41:20 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer für schreiben in Datei on Fri, 27 Feb 2009 10:46:31 GMT]]></title><description><![CDATA[<p>Dann stelle ich die Fragen anders: Gibt es eine Möglichkeit den Vorgang, jeden Wert einzeln in eine Datei zu schreiben, zu optimieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1671158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1671158</guid><dc:creator><![CDATA[Bennnno]]></dc:creator><pubDate>Fri, 27 Feb 2009 10:46:31 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer für schreiben in Datei on Fri, 27 Feb 2009 11:30:54 GMT]]></title><description><![CDATA[<p>Du meinst, jeden einzelnen Wert aus dem Array per Schleife zu schreiben?<br />
Ich wüsste jetzt nicht wie du den Vorgang noch optimieren willst.Was du machen kannst,ist eventuell die Daten in einen Stream zu schreiben und den Stream gebündelt in die Datei zu ballern, wobei ich die Lösung nicht gerade schön finde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1671194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1671194</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Fri, 27 Feb 2009 11:30:54 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer für schreiben in Datei on Fri, 27 Feb 2009 11:43:15 GMT]]></title><description><![CDATA[<p>Bennnno schrieb:</p>
<blockquote>
<p>Dann stelle ich die Fragen anders: Gibt es eine Möglichkeit den Vorgang, jeden Wert einzeln in eine Datei zu schreiben, zu optimieren?</p>
</blockquote>
<p>Kaum. Möglichst alles in einem Rutsch schreiben, statt alle paar Sekunden einen einzelnen Wert, aber dass wirst du wohl bereits so machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1671204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1671204</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 27 Feb 2009 11:43:15 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer für schreiben in Datei on Fri, 27 Feb 2009 12:14:24 GMT]]></title><description><![CDATA[<p>Wieso ist es denn eigentlich so ein riesiger Aufwand? So etwas dauert bei mir etwas gegen die 200ms, also in einer Zeit, wo der Nutzer kaum was bemerkt.<br />
Wenn du willst, kannst du deinen Stream noch puffern, allerdings hat das bei mir nur ca. 20ms Unterschied auf diese Operation:</p>
<pre><code class="language-cpp">std::size_t const BUFFER_SIZE = 4096;
char buffer[BUFFER_SIZE];

std::ofstream file(/*...*/);
file.rdbuf-&gt;pubsetbuf(buffer, BUFFER_SIZE);

// ...

file.close();
</code></pre>
<p>Wie schreibst du denn in das File? Irgendwelcher zusätzlicher aufwendiger Code dabei, der eine Struktur im File erstellen soll?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1671245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1671245</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 27 Feb 2009 12:14:24 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer für schreiben in Datei on Fri, 27 Feb 2009 12:20:18 GMT]]></title><description><![CDATA[<p>Bennnno schrieb:</p>
<blockquote>
<p>Dann stelle ich die Fragen anders: Gibt es eine Möglichkeit den Vorgang, jeden Wert einzeln in eine Datei zu schreiben, zu optimieren?</p>
</blockquote>
<p>Gegenfrage: Gibt es eine <strong>Notwendigkeit</strong>, den Schreibvorgang zu optimieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1671248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1671248</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 27 Feb 2009 12:20:18 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer für schreiben in Datei on Fri, 27 Feb 2009 12:27:51 GMT]]></title><description><![CDATA[<p>ofstream ist schon gepuffert und du müßtest schon einen wahnsinnsaufwand treiben, um da noch ein fitzelchen schneller zu werden.<br />
falls du langsamkeit bemerkst, haste nen anderen fehler gemacht:<br />
a) ungetunte lib des MSVC60 genommen<br />
b) endl benutzt<br />
c) dauernd close/open gemacht<br />
d) noch was schlimmeres, ich bin schon ganz gespannt drauf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1671256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1671256</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 27 Feb 2009 12:27:51 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer für schreiben in Datei on Mon, 02 Mar 2009 11:24:41 GMT]]></title><description><![CDATA[<p>Sorry, es hat für die Antwort leider etwas länger gedauert.</p>
<p>Der Code sieht wie folgt aus:</p>
<pre><code class="language-cpp">ofstream out_handle; 
out_handle.open(file_handle, ios_base::out | ios_base::binary); 

for(int i=0;i&lt;ySize;i++){
	for(int j=0;j&lt;xSize;j++){
		out_handle &lt;&lt; floatPixel[i][j];
	}
}

out_handle.close();
</code></pre>
<p>FloatPixel ist ein 2-dimensionaler Vektor, der eine Art Matrix simuliert.<br />
ySize=240, xSize=320</p>
<p>Ich mache noch einen haufen weiterer Dateizugriffe, die allerdings alle nur lesen. Diese laufen aber gewohnt schnell.</p>
<p>Zum die Situation noch einmal zu verdeutlichen: Zum schreiben der Werte benötige ich ca. 4-5 Sekunden. Zu lang für meinen Geschmack.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1672732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672732</guid><dc:creator><![CDATA[Bennnno]]></dc:creator><pubDate>Mon, 02 Mar 2009 11:24:41 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer für schreiben in Datei on Mon, 02 Mar 2009 11:54:44 GMT]]></title><description><![CDATA[<p>Geschmack ist irgendwie fehl am Platz, bei einer solchen Bewertung.</p>
<p>Du schreibst ca. 300 kbyte raus, wenn ich richtig gerechnet habe.<br />
Kann auf einem PC-System normal sein, je nach Hardware. Wie gesagt, Geschmack bringt uns hier nicht weiter.</p>
<p>Was hast du für ein PC-System? Welche Std-Lib-Implementierung? Compiler? Welche Runtime linkst du?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1672750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672750</guid><dc:creator><![CDATA[Bulli]]></dc:creator><pubDate>Mon, 02 Mar 2009 11:54:44 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer für schreiben in Datei on Mon, 02 Mar 2009 12:00:05 GMT]]></title><description><![CDATA[<p>Optimieren könnte man auch, in dem man nicht einzeln in den filestream schreibt. Z.B. in dem man die ganzen Werte 76800 einzelnen Werte in einen stringstream schreibt. Und dann diesen mit .str() in den filestream haut.</p>
<pre><code class="language-cpp">void write(std::ostream &amp;os)
{
 for(int i=0;i&lt;ySize;i++){
     for(int j=0;j&lt;xSize;j++){
         out_handle &lt;&lt; floatPixel[i][j];
     }
 }
}

voif foo()
{
 stringstream os;
 write(os);

 ofstream out_handle(file_handle, ios_base::out | ios_base::binary);
 out_handle &lt;&lt; os.str();
 out_handle.close();

}
</code></pre>
<p>write() kann auch filestreams annehmen. Haste gleich noch abstrahiert. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1672756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672756</guid><dc:creator><![CDATA[Bulli]]></dc:creator><pubDate>Mon, 02 Mar 2009 12:00:05 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer für schreiben in Datei on Mon, 02 Mar 2009 12:01:31 GMT]]></title><description><![CDATA[<p>In write() natürlich <em>os</em> anstatt out_handle benutzen (blödes copy+paste).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1672758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672758</guid><dc:creator><![CDATA[Bulli]]></dc:creator><pubDate>Mon, 02 Mar 2009 12:01:31 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer für schreiben in Datei on Mon, 02 Mar 2009 13:58:49 GMT]]></title><description><![CDATA[<p>Vielen Dank erstmal, leider hält sich der Optimierungsgrad bei der Lösung in Grenzen.</p>
<p>Gibt sonst evtl. eine Alternative die Daten anderweitig zwischenzuspeichern?<br />
Die Datei war eigentlich als Schnittstelle zwischen 2 Programmen gedacht, die getrennt voneinander laufen. Der Lösungsansatz sollte allerdings ähnlich einfach wie bei einer Datei sein.</p>
<p>Bin für jede Anregung dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1672826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672826</guid><dc:creator><![CDATA[Bennnno]]></dc:creator><pubDate>Mon, 02 Mar 2009 13:58:49 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer für schreiben in Datei on Mon, 02 Mar 2009 14:18:45 GMT]]></title><description><![CDATA[<p>War es nicht besonders schneller mit dem stringstream??? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Wenn zwei Programme Daten austauschen sollen, fällt das unter IPC:<br />
<a href="http://www.boost.org/doc/libs/1_38_0/doc/html/interprocess.html" rel="nofollow">http://www.boost.org/doc/libs/1_38_0/doc/html/interprocess.html</a></p>
<p>Evtl. ist auch MPI <a href="http://www.boost.org/doc/libs/1_38_0/doc/html/mpi.html" rel="nofollow">http://www.boost.org/doc/libs/1_38_0/doc/html/mpi.html</a> interessant.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1672837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672837</guid><dc:creator><![CDATA[Bulli]]></dc:creator><pubDate>Mon, 02 Mar 2009 14:18:45 GMT</pubDate></item></channel></rss>