Çok zaman harcayan bir uygulama üzerinde çalışıyorum ve biraz hızlandırmak istiyorum. Ctime kütüphanesinin clock() fonksiyonunu kullanarak tek parçaların çalışma zamanını analiz ettim ve bana göre tamamen net olmayan bir şey buldum.C++ hızlandırma yöntem çağrısı
Bir yöntemin dışında ve içinde zaman baskısı alıyorum, buna Yöntem1 olarak adlandıralım. Method1 içindeki baskı, tüm gövdesini içerir, sadece bir floatın geri dönüşü tabii ki dışarıda bırakılır. Şey, şey şu ki, dışarıdaki baskı, Yöntem1'deki baskı süresinin iki katı ila üç katı arasındadır. Dışarıdaki baskının daha fazla zaman göstermesi gerektiği açık, ama fark benim için oldukça büyük gözüküyor.
Yöntemim şu şekilde görünüyor: Verilerin kopyalanmasını önlemek için referanslar ve işaretçileri parametre olarak kullanıyorum. Veri vektörünün örneklere 330.000 işaretçi içerdiğini unutmayın.
float ClassA::Method1(vector<DataClass*>& data, TreeClass* node)
{
//start time measurement
vector<Mat> offset_vec_1 = vector<Mat>();
vector<Mat> offset_vec_2 = vector<Mat>();
for (int i = 0; i < data.size(); i++)
{
DataClass* cur_data = data.at(i);
Mat offset1 = Mat();
Mat offset2 = Mat();
getChildParentOffsets(cur_data, node, offset1, offset2);
offset_vec_1.push_back(offset1);
offset_vec_2.push_back(offset2);
}
float ret = CalculateCovarReturnTrace(offset_vec_1) + CalculateCovarReturnTrace(offset_vec_2);
//end time measurement
return ret;
}
Arama hızını artırmak için herhangi bir "bariz" yol var mı? Metodu okunabilirlik nedenlerinden dolayı kullanmayı tercih ederim, böylece hız kazanmak için herhangi bir şeyi değiştirebilir miyim?
Herhangi bir öneriniz için teşekkür ederiz!
OP başkaları tarafından yapılan yorumların herhangi bir hak iddia etmek çalışıyorum olmadan
İşlevi satır içine almanın bir yolunu bulamazsanız, arama hızını artırmak için fazla bir potansiyel yoktur. –
Açık bir yol, derleyicinin optimizasyon bayraklarını ayarlıyor olabilir. Ancak, yöntemin ne yaptığını ayrıntılı olarak açıklamalısınız, yöntem imzası bize herhangi bir hit vermez. –
Zaman ayırıcı yıkıcı aramalar olabilir ...İşlevde çok sayıda karmaşık yapı varsa, temizleme için çok fazla olabilir – vu1p3n0x