我正在开展一个项目,在这个项目中,大量对象相互交互。我的代码存在性能问题。可以说它具有如下所述的结构。
有一个类(让我们称之为" A"),如下所示:
class A
{
/*Some methods and variables*/
public:
const int* getPointerToTime() { return &mTime; }
private:
std::vector<B> mBList;
int mTime;
}
然后有课程&#34; B&#34;像这样
class B
{
/*Some methods and variables*/
public:
B(A* myA) { mTime = myA->getPointerToTime(); }
int getTime() { return *mTime; }
private:
std::vector<C> mCList;
const int* mTime;
}
然后还有另一个班级&#34; C&#34;它有一个方法(&#34;更新&#34;),将在程序的每个循环中调用。像这样:
class C
{
/*Some methods and variables*/
public:
C(B* myB) { mMyB = myB; }
void update()
{
int t = mMyB->getTime();
/*some things to do here with "t"*/
}
private:
B* mMyB;
}
所以基本上有很多&#34; B&#34;课堂上的对象&#34; A&#34;并且有很多&#34; C&#34;在课堂上&#34; B&#34;并且在每个周期中,应更新这些对象中的每一个。一切正常,但我使用visual studio的性能分析测试了它的性能,有趣的是(或者可能不是......)线
int t = B->getTime();
成为最热门的产品,占总样品的38%!我在代码的其他部分使用此方法。实际上我可以想到代码中的其他地方,这比这里更多地调用这个方法,但它的样本百分比甚至不接近于类中所使用的那个&#34; C&#34;!我怀疑可能是班级中的变量&#34; A&#34;当程序到达&#34; C&#34;的更新方法时,它没有被缓存在CPU中,但是一位朋友认为情况并非如此,因为L3和RAM的计算速度无法实现速度差异很大。你觉得怎么样?
答案 0 :(得分:1)
据我所知,Visual Studio
函数B-&gt; getTime();与任何其他函数相比,被称为更多次。
因为这个函数是由B类成员的C对象调用的。
使用给定的代码,很有可能比任何其他函数调用此函数的次数更多。
例如,10个B每个都有100个C。然后在一个循环中调用B-&gt; getTime()1000次。
答案 1 :(得分:0)
瓶颈似乎是在执行方法getTime()时,两个去引用不应该像对比的方法执行一样多。