過去数か月間、私はVisual C ++プロジェクトに取り組んでおり、カメラから画像を取得して処理しています。今日まで、これはデータを更新するのに約65ミリ秒かかりましたが、今では突然大幅に増加しています。プログラムを起動すると、最初の30回ほどの反復で期待どおりに実行され、その後、ループ時間が65ミリ秒から250ミリ秒に突然増加します。
奇妙なことに、各関数のタイミングを計った後、速度低下を引き起こしているコードの部分はかなり基本的であり、1か月以上変更されていないことがわかりました。そこに入るデータは変更されず、反復ごとに同一ですが、最初は1ミリ秒未満だった実行時間は、残りのコードが期待どおりに(時間的に)実行されている間に突然170ミリ秒に増加します。
基本的に、私は同じ関数を何度も呼び出しています。最初の30回の呼び出しでは、正常に実行され、その後は明らかな理由もなく速度が低下します。また、これは実行時間の突然の変化であり、段階的な増加ではないことにも注意してください。
これを引き起こしている可能性がありますか?コードは一部のメモリ(〜50 kb / s)をリークしていますが、突然の4倍の速度低下を保証するには十分ではありません。誰かアイデアがあれば聞いてみたいです!
編集:うわー、それは速かった!これが速度を落とすコード(いくつかの数学を除いたもの)です。これは、行数を増やすと計算時間が急激に増える関数だと思います。ここで重要なのは、同じデータを使用すると、30回の反復後に速度が低下することです。
void CameraManager::IntersectLines()
{
// Two custom classes
TMaths maths;
TLine line1, line2;
while(lines.size()>0)
{
// Save the current line
line1 = lines[0];
// Then remove it from the list
lines.erase(lines.begin());
CvMat* aPoint;
for (int i = 0; i<lines.size(); i++)
{
line2 = lines[i];
aPoint = cvCreateMat(1, 4, CV_32FC1);
// Calculate the point of intersection
maths.Intersect(line1.xyz, line2.xyz, line1.uvw, line2.uvw, aPoint);
// Add the point to the list
points.push_back(aPoint);
}
}
}
}