
Hello, I have made a few tests with the performance of BOOST_FOREACH. The results are for me unexpected slow...may be one has an idea if I make something wrong... vector[int]: index:0.00167619 vector[int]: iterator:0.00167619 vector[int]: BOOST_FOREACH:9.40036 list[int]: iterator:239.669 list[int]: BOOST_FOREACH:233.219 vector[TestData]: index:0.00167619 vector[TestData]: iterator:0.00167619 vector[TestData]: BOOST_FOREACH:9.40008 list[TestData]: iterator:233.827 list[TestData]: BOOST_FOREACH:238.513 testArray[int]: index:0.00167619 testArray[int]: BOOST_FOREACH:9.40008 Best regards Hansjörg the test program was: // ForEach.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "..\include\PerformanceCounter.h" #include <vector> #include <boost\foreach.hpp> #include <iostream> #include <list> using namespace std; using namespace Microtec; class TestData { public: TestData(int val1, int val2, int val3):var1(val1),var2(val2),var3(val3){} int var1; int var2; int var3; }; int testArray[10000000]; int _tmain(int argc, _TCHAR* argv[]) { vector<int> data; list<int> lstData; vector<TestData> vectorTestData; list<TestData> lstTestData; for(int i = 0; i < 10000000;i++) { data.push_back(i); lstData.push_back(i); vectorTestData.push_back(TestData(i,i,i)); lstTestData.push_back(TestData(i,i,i)); } int res = 0; const int actSize = (int)data.size(); for(int i = 0; i < actSize; i++) { res += data[i]; } //takes 0.0017 ms res = 0; for(vector<int>::iterator it = data.begin(); it != data.end(); it++) { res += *it; } //takes 0.0017 ms res = 0; BOOST_FOREACH(int val,data) { res += val; } //takes 9.400 ms //list res = 0; for(list<int>::iterator it = lstData.begin(); it != lstData.end(); it++) { res += *it; } //takes 239.669 ms res = 0; BOOST_FOREACH(int val,lstData) { res += val; } //takes 233.219 ms //vector TestData for(int i = 0; i < actSize; i++) { res += vectorTestData[i].var1; } //takes 0.0017 ms res = 0; for(vector<TestData>::iterator it = vectorTestData.begin(); it != vectorTestData.end(); it++) { res += it->var1; } //takes 0.0017 ms res = 0; BOOST_FOREACH(TestData& val,vectorTestData) { res += val.var1; } //takes 9.400 ms //list res = 0; for(list<TestData>::iterator it = lstTestData.begin(); it != lstTestData.end(); it++) { res += it->var1; } //takes 233.827 ms res = 0; BOOST_FOREACH(TestData& val,lstTestData) { res += val.var1; } //takes 238.827 ms for(int i = 0; i < actSize; i++) { res += testArray[i]; } //takes 0.0017 ms res = 0; BOOST_FOREACH(int val,testArray) { res += val; } //takes 9.400 ms return 0; }