我已经用and循环测试了List<string>
vsIEnumerable<string>
迭代,列表是否可能更快?for
foreach
这些是我能找到的几个链接中的 2 个,它们公开声明性能更好地IEnumerable
迭代List
。
我的测试是从一个包含 URL 列表的文本文件中加载 10K 行。
我首先将其加载到 List ,然后将 List 复制到 IEnumerable
List<string> StrByLst = ...method to load records from the file .
IEnumerable StrsByIE = StrByLst;
所以每个都有 10k 个项目类型<string>
在每个集合上循环 100 次,意味着 100K 次迭代,结果是
List<string>
比 _ _IEnumerable<string>
这是可以预测的吗?
- 更新
这是进行测试的代码
string WorkDirtPath = HostingEnvironment.ApplicationPhysicalPath;
string fileName = "tst.txt";
string fileToLoad = Path.Combine(WorkDirtPath, fileName);
List<string> ListfromStream = new List<string>();
ListfromStream = PopulateListStrwithAnyFile(fileToLoad) ;
IEnumerable<string> IEnumFromStream = ListfromStream ;
string trslt = "";
Stopwatch SwFr = new Stopwatch();
Stopwatch SwFe = new Stopwatch();
string resultFrLst = "",resultFrIEnumrable, resultFe = "", Container = "";
SwFr.Start();
for (int itr = 0; itr < 100; itr++)
{
for (int i = 0; i < ListfromStream.Count(); i++)
{
Container = ListfromStream.ElementAt(i);
}
//the stop() was here , i was doing changes , so my mistake.
}
SwFr.Stop();
resultFrLst = SwFr.Elapsed.ToString();
//forgot to do this reset though still it is faster (x56??)
SwFr.Reset();
SwFr.Start();
for(int itr = 0; itr<100; itr++)
{
for (int i = 0; i < IEnumFromStream.Count(); i++)
{
Container = IEnumFromStream.ElementAt(i);
}
}
SwFr.Stop();
resultFrIEnumrable = SwFr.Elapsed.ToString();
更新...最终
将计数器移到 for 循环之外,
int counter = ..count
对于 IEnumerable 和 List
然后按照@ScottChamberlain 的建议将 counter(int) 作为项目总数传递。重新检查所有东西都已到位,现在结果比 IEnumerable 快 5 %。因此得出结论,按场景使用 - 用例......根本没有性能差异......