C++ に 1 つのコード、C# に 1 つのコードがあります。
1 つの .push-back と 1 つの .add の周りの時間を測定したことを強調しておきます。10000 回の発生について、費やした時間を書きます。したがって、コードの残りの部分は重要ではありません。説明のために書いただけです。
C++ コード
void pv(int depth, m1* prevM1)
{
if (depth == 0)
return;
vector <m1> *mList;
if (prevM1->childM1 != 0)
mList = prevMove->childM1;
else
{
mList = new vector<m1>;
f1 (mList);
}
for(vector<m1>::iterator it=mList.begin(); it !=m1.end(); ++it)
{
pv(depth - 1 ,it.chilM1);
}
prevM1->childM1 = mList;
}
void f1(vector<m1>* Moves)
{
//私はカウンターとこのpush_backの周りの時間を持っています. 10000回に達したら時間を印刷します
m1 obj;
Moves->push_back(obj);
// そしてここ
m1 obj2;
Moves->push_back(obj2);
m1 obj3;
Moves->push_back(obj3);
m1 obj4;
Moves->push_back(obj4);
m1 obj5;
Moves->push_back(obj5);
m1 obj6;
Moves->push_back(obj6);
m1 obj7;
Moves->push_back(obj7);
m1 obj8;
Moves->push_back(obj8);
m1 obj9;
Moves->push_back(obj9);
m1 obj10;
Moves->push_back(obj10);
}
--------> これをメインで実行します
m1 move;
PV(10, &Moves);
C# コード
m1 f1()
{
List<m1> Moves = new List<m1>();
//私はこのAddの周りにカウンターと時間を持っています. 10000回に達したら時間を印刷します
m1 obj = new m1();
Moves.Add(obj);
//そしてここ
m1 obj2 = new m1();
Moves.Add(obj2);
m1 obj3 = new m1();
Moves.Add(obj3);
m1 obj4 = new m1();
Moves.Add(obj4);
m1 obj5 = new m1();
Moves.Add(obj5);
m1 obj6 = new m1();
Moves.Add(obj6);
m1 obj7 = new m1();
Moves.Add(obj7);
m1 obj8 = new m1();
Moves.Add(obj8);
m1 obj9 = new m1();
Moves.Add(obj9);
m1 obj10 = new m1();
Moves.Add(obj10);
return Moves;
}
void PV(int depth,m1 prevM1)
{
List<m1> mList;
if (depth == 0)
{
return;
}
if (prevMove.childM1 != null)
{
mList = prevMove.childM1;
}
else
{
mList = f1();
}
foreach(m1 move in mList)
{
pv(depth - 1, move);
}
--------> これをメインで実行します
m1 move;
PV(10, move);
m1 クラスは、C# の c++ と c# の両方で同じです
class m1
{
public String ms;
public List<m1> childM1;
public double d;
}
C++で
class m1
{
public:
string ms;
m1* childM1;
double d;
}
c# のコードは 12 ミリ秒で実行されましたが、c++ のコードは 143 ミリ秒で実行されました。違いを確認するために、何度も実行します。c++ のコードは、c# のコードよりも少なくとも 10 倍遅くなりました。c++ の vector は c# の List と同じなので、何かを見逃しているように見えるので、この違いを見つけました。
どんな助けでも大歓迎です。