<?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[Copy Constructor langsam?]]></title><description><![CDATA[<p>Hallo <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>für einen Algorithmus initialisiere ich ein paar klassen, die viele Dinge vorab berechnen und speichern. (Lookup Tables, Strukturen, etc).<br />
Für Multithreading möchte ich für jede Instanz eines Threads diese Klassen kopieren. dafür Copy Constructor.</p>
<p>Jetzt zeigt sich das ganze allerdings als ziemlich Langsam.<br />
Das erstellen und vorabberechnen dauert etwa 3 Sekunden.<br />
Der Copy Constructor benötigt 39 Sekunden??</p>
<p>Und ich weiß nicht mal genau woran es denn liegt, da es außerhalb meines Codes zur wartezeit kommt.<br />
Hier die Beiden Constructor mit Markierung wo genau die 39 Sekunden Verstreichen:</p>
<pre><code>_DBHistogramScan::_DBHistogramScan(_DBHistogramScan&amp; other) {
	m_DimOfData						= other.m_DimOfData;
	m_absDataRange					= other.m_absDataRange;
	m_dataAmount_UpperAssignment	= other.m_dataAmount_UpperAssignment;
	m_epsDBScan						= other.m_epsDBScan;
	m_minPointsDBScan				= other.m_minPointsDBScan;
	m_rMinScanRange					= other.m_rMinScanRange;
	m_rMaxScanRange					= other.m_rMaxScanRange;
	m_DataIsSet						= other.m_DataIsSet;

	// Bis hier keine Verzögerung - Zeit ~ 0
	m_Histogram						= _Histogram(other.m_Histogram); 
	// Hier Zeit ~ 39 Sekunden
	cout &lt;&lt; &quot;#&quot;; 
	m_DBScan						= _DBScan(other.m_DBScan);
	cout &lt;&lt; &quot;#&quot;;

	m_pFilteredDataVector3D			= other.m_pFilteredDataVector3D;
	m_pFilteredDataVector2D			= other.m_pFilteredDataVector2D;

}
</code></pre>
<pre><code>_Histogram::_Histogram(_Histogram&amp; other) {

	m_Dimension					= other.m_Dimension;
	m_BinWidth					= other.m_BinWidth;
	m_BinScaleFactor			= other.m_BinScaleFactor;
	m_DataRange					= other.m_DataRange;
	m_BinOffset					= other.m_BinOffset;
	m_uNumBins1Dim				= other.m_uNumBins1Dim;
	m_uNumBins2Dim				= other.m_uNumBins2Dim;

	m_Bins						= other.m_Bins;

	m_BinOrder					= other.m_BinOrder;

	m_BinIDCenterDistSquare		= other.m_BinIDCenterDistSquare;

	cout &lt;&lt; &quot;*&quot;; // Bis hier hin Ohne verzögerung.  Zeit ~ 0

}
</code></pre>
<p>Kann mir jemand sagen was außerhalb meines Codes (Beim ende des Copy Constructor) so lange benötigt? Oder/Und wie ich das ganze schneller Koppieren kann? Die Klassen speichern ihre LookupTables alle in 1D Std::vectoren</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/338657/copy-constructor-langsam</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 10:15:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338657.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 30 Jun 2016 08:15:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Copy Constructor langsam? on Thu, 30 Jun 2016 08:15:25 GMT]]></title><description><![CDATA[<p>Hallo <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>für einen Algorithmus initialisiere ich ein paar klassen, die viele Dinge vorab berechnen und speichern. (Lookup Tables, Strukturen, etc).<br />
Für Multithreading möchte ich für jede Instanz eines Threads diese Klassen kopieren. dafür Copy Constructor.</p>
<p>Jetzt zeigt sich das ganze allerdings als ziemlich Langsam.<br />
Das erstellen und vorabberechnen dauert etwa 3 Sekunden.<br />
Der Copy Constructor benötigt 39 Sekunden??</p>
<p>Und ich weiß nicht mal genau woran es denn liegt, da es außerhalb meines Codes zur wartezeit kommt.<br />
Hier die Beiden Constructor mit Markierung wo genau die 39 Sekunden Verstreichen:</p>
<pre><code>_DBHistogramScan::_DBHistogramScan(_DBHistogramScan&amp; other) {
	m_DimOfData						= other.m_DimOfData;
	m_absDataRange					= other.m_absDataRange;
	m_dataAmount_UpperAssignment	= other.m_dataAmount_UpperAssignment;
	m_epsDBScan						= other.m_epsDBScan;
	m_minPointsDBScan				= other.m_minPointsDBScan;
	m_rMinScanRange					= other.m_rMinScanRange;
	m_rMaxScanRange					= other.m_rMaxScanRange;
	m_DataIsSet						= other.m_DataIsSet;

	// Bis hier keine Verzögerung - Zeit ~ 0
	m_Histogram						= _Histogram(other.m_Histogram); 
	// Hier Zeit ~ 39 Sekunden
	cout &lt;&lt; &quot;#&quot;; 
	m_DBScan						= _DBScan(other.m_DBScan);
	cout &lt;&lt; &quot;#&quot;;

	m_pFilteredDataVector3D			= other.m_pFilteredDataVector3D;
	m_pFilteredDataVector2D			= other.m_pFilteredDataVector2D;

}
</code></pre>
<pre><code>_Histogram::_Histogram(_Histogram&amp; other) {

	m_Dimension					= other.m_Dimension;
	m_BinWidth					= other.m_BinWidth;
	m_BinScaleFactor			= other.m_BinScaleFactor;
	m_DataRange					= other.m_DataRange;
	m_BinOffset					= other.m_BinOffset;
	m_uNumBins1Dim				= other.m_uNumBins1Dim;
	m_uNumBins2Dim				= other.m_uNumBins2Dim;

	m_Bins						= other.m_Bins;

	m_BinOrder					= other.m_BinOrder;

	m_BinIDCenterDistSquare		= other.m_BinIDCenterDistSquare;

	cout &lt;&lt; &quot;*&quot;; // Bis hier hin Ohne verzögerung.  Zeit ~ 0

}
</code></pre>
<p>Kann mir jemand sagen was außerhalb meines Codes (Beim ende des Copy Constructor) so lange benötigt? Oder/Und wie ich das ganze schneller Koppieren kann? Die Klassen speichern ihre LookupTables alle in 1D Std::vectoren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500592</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Thu, 30 Jun 2016 08:15:25 GMT</pubDate></item><item><title><![CDATA[Reply to Copy Constructor langsam? on Thu, 30 Jun 2016 08:48:39 GMT]]></title><description><![CDATA[<p>Du benutzt an der Stelle nicht den <em>Copy-C'tor</em> von Histogramm.</p>
<p>Zeig mal <em>Standard-C'tor</em> und Zuweisung von <code>histogramm</code> .<br />
Denn das passiert: <code>m_histogramm</code> wird mit dem <em>Standard-C'tor</em> erstellt und danach wird eine Zuweisung durchgeführt.</p>
<p>Warum das so ist?<br />
Weil Du keine <a href="http://en.cppreference.com/w/cpp/language/initializer_list" rel="nofollow">Member initializer list</a> verwendest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500599</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Thu, 30 Jun 2016 08:48:39 GMT</pubDate></item><item><title><![CDATA[Reply to Copy Constructor langsam? on Thu, 30 Jun 2016 08:54:35 GMT]]></title><description><![CDATA[<p>Also erst mal ist das kein Copy Constructor, da der &quot;other&quot; nicht const ist. Dann würde ich Dir die Verwendung von Initialisierungslisten nahelegen. Also so:</p>
<pre><code>_DBHistogramScan::_DBHistogramScan(const _DBHistogramScan&amp; other)
  : m_DimOfData(other.m_DimOfData),
    m_absDataRange(other.m_absDataRange),
    m_dataAmount_UpperAssignment(other.m_dataAmount_UpperAssignment),
    m_epsDBScan(other.m_epsDBScan),
    m_minPointsDBScan(other.m_minPointsDBScan),
    m_rMinScanRange(other.m_rMinScanRange),
    m_rMaxScanRange(other.m_rMaxScanRange),
    m_DataIsSet(other.m_DataIsSet),
    m_Histogram(other.m_Histogram),
    m_DBScan(other.m_DBScan),
    m_pFilteredDataVector3D(other.m_pFilteredDataVector3D),
    m_pFilteredDataVector2D(other.m_pFilteredDataVector2D)
{
}
</code></pre>
<p>Bei <code>_Histogram</code> genauso.</p>
<p>Das löst allerdings nicht das Problem. Aber Du hast ja bereits herausgefunden, dass die Verzögerung im Konstruktor von <code>_DBScan</code> statt findet. Den Konstruktor solltest Du Dir mal genauer anschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500600</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Thu, 30 Jun 2016 08:54:35 GMT</pubDate></item><item><title><![CDATA[Reply to Copy Constructor langsam? on Thu, 30 Jun 2016 09:11:15 GMT]]></title><description><![CDATA[<p>Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ich bin gerade selbst dahinter gekommen das nach dem ende vom Copy Const. ein Return steht. Es wird ja eine Klasse zurückgegeben. Und das, was auch immer da genau passiert dauert ewig.</p>
<p>Ich habe jetzt folgendes gemacht:</p>
<pre><code>void					_Histogram::operator = (const _Histogram&amp; other) {
	m_Dimension					= other.m_Dimension;
	m_BinWidth					= other.m_BinWidth;
	m_BinScaleFactor			= other.m_BinScaleFactor;
	m_DataRange					= other.m_DataRange;
	m_BinOffset					= other.m_BinOffset;
	m_uNumBins1Dim				= other.m_uNumBins1Dim;
	m_uNumBins2Dim				= other.m_uNumBins2Dim;

	m_Bins						= other.m_Bins;

	m_BinOrder					= other.m_BinOrder;

	m_BinIDCenterDistSquare		= other.m_BinIDCenterDistSquare;

}
</code></pre>
<p>Natürlich für alle Klassen, nach dem selben Schema. Jetzt dauert das Copy aller Klassen nur noch wenige Millisekunden.<br />
= Funktionalität einwandfrei.<br />
Ist es vom Stil her auch ok?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500601</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Thu, 30 Jun 2016 09:11:15 GMT</pubDate></item><item><title><![CDATA[Reply to Copy Constructor langsam? on Thu, 30 Jun 2016 09:48:13 GMT]]></title><description><![CDATA[<p>cl90 schrieb:</p>
<blockquote>
<p>Ist es vom Stil her auch ok?</p>
</blockquote>
<p>Wahrscheinlich ist es unnötig. Nimm es mal raus und schau, ob es noch kompiliert.</p>
<p>Wenn ja, dann wird ein copy-assignment-operator vom Compiler generiert und der macht genau das gleiche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500604</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Thu, 30 Jun 2016 09:48:13 GMT</pubDate></item><item><title><![CDATA[Reply to Copy Constructor langsam? on Thu, 30 Jun 2016 15:04:43 GMT]]></title><description><![CDATA[<p>Der Assignment-Operator sieht aus, als würde er einfach alle Member kopieren. Definierst Du ihn nicht, wird der Compiler dir genau den implizit zur Verfügung stellen. Also brauchst Du ihn nicht.</p>
<p>Ausserdem sollte er eine Referenz auf *this zurück liefern. Ist nicht unbedingt nötig aber doch sehr üblich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500636</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Thu, 30 Jun 2016 15:04:43 GMT</pubDate></item><item><title><![CDATA[Reply to Copy Constructor langsam? on Thu, 30 Jun 2016 15:11:41 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p>Also erst mal ist das kein Copy Constructor, da der &quot;other&quot; nicht const ist.</p>
</blockquote>
<p>Das const ist für die Klassifizierung als copy-ctor unerheblich.</p>
<pre><code class="language-cpp">struct foo
{
    foo(foo&amp;);
    foo(const foo&amp;);
    foo(volatile foo&amp;);
    foo(const volatile foo&amp;);
};
</code></pre>
<p>Alle aufgeführten Formen sind copy-ctors.</p>
<p>Es sieht ja ohnehin so aus, als ob im vorliegenden Fall, ein default copy-ctor und copy-assignment-op ausreichend sind. Ohne die Klassendefinition zu kennen, kann man das nat. nicht mit absoluter Sicherheit sagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500638</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 30 Jun 2016 15:11:41 GMT</pubDate></item></channel></rss>