我在 C++ 中有 1 个代码,在 C# 中有 1 个代码
我应该强调,我只是测量了一个 .push-back 和一个 .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);
}
--------> 我在 main 中执行这个
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);
}
--------> 我在 main 中执行这个
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++ 中的向量与 c# 中的 List 相同,所以我似乎遗漏了一些东西,所以我发现了这种差异。
任何帮助都将受到高度欢迎。