C# MonoDevelop';的重构操作似乎将foreach转换为较慢的for循环?

C# MonoDevelop';的重构操作似乎将foreach转换为较慢的for循环?,c#,mono,monodevelop,C#,Mono,Monodevelop,这是我的密码 foreach (Company company in core.GetCompanies("Dual")) { Console.WriteLine (company.Name); } 但是,MonoDevelop的静态代码分析可以将其转换为优化的for循环 这是MonoDevelop的优化代码 for (int i = 0, maxLength = core.GetCompanies ("Dual").Length; i < maxLength; i++) {

这是我的密码

foreach (Company company in core.GetCompanies("Dual"))
{
    Console.WriteLine (company.Name);
}
但是,
MonoDevelop
的静态代码分析可以将其转换为优化的
for
循环

这是MonoDevelop的优化代码

for (int i = 0, maxLength = core.GetCompanies ("Dual").Length; i < maxLength; i++)
{
    Company company = core.GetCompanies ("Dual") [i];
    Console.WriteLine (company.Name);
}
for(inti=0,maxLength=core.getcompanys(“Dual”).Length;i
为什么第二个代码段比第一个更优化?第二个不是对同一个函数进行多次调用吗?我已经测量过了,第一个比第二个快;我用秒表来计算滴答声:

foreach
12843440蜱

用于

63266749个记号

一般来说,C#中的枚举数不被认为是高性能的。然而,在这种情况下,MonoDevelop试图优化枚举器的尝试是可怕的。假设GetCompanies()返回一个数组,优化后的代码应该如下所示:

Company[] companies = core.GetCompanies("Dual");
for (int i=0; i<companies.Length; i++)
{
    Console.WriteLine (companies[i].Name);
} 
Company[]companys=core.getcompanys(“双重”);

对于(int i=0;i一般来说,C#中的枚举数不被认为是高性能的。但是,在这种情况下,MonoDevelop试图优化枚举数的尝试非常糟糕。假设GetCompanys()返回一个数组,优化后的代码应该如下所示:

Company[] companies = core.GetCompanies("Dual");
for (int i=0; i<companies.Length; i++)
{
    Console.WriteLine (companies[i].Name);
} 
Company[]companys=core.getcompanys(“双重”);

对于(int i=0;i一般来说,C#中的枚举数不被认为是高性能的。但是,在这种情况下,MonoDevelop试图优化枚举数的尝试非常糟糕。假设GetCompanys()返回一个数组,优化后的代码应该如下所示:

Company[] companies = core.GetCompanies("Dual");
for (int i=0; i<companies.Length; i++)
{
    Console.WriteLine (companies[i].Name);
} 
Company[]companys=core.getcompanys(“双重”);

对于(int i=0;i一般来说,C#中的枚举数不被认为是高性能的。但是,在这种情况下,MonoDevelop试图优化枚举数的尝试非常糟糕。假设GetCompanys()返回一个数组,优化后的代码应该如下所示:

Company[] companies = core.GetCompanies("Dual");
for (int i=0; i<companies.Length; i++)
{
    Console.WriteLine (companies[i].Name);
} 
Company[]companys=core.getcompanys(“双重”);

对于(int i=0;iBoth代码做同样的事情。带有for循环的代码会更快。而且这两个代码都可以优化一点,其中只有一行代码。即使是ReSharper也建议使用次优、完全有害或完全错误的代码。不要盲目相信只应用简单规则的工具。在这种情况下,我怀疑不是建议进行优化,而是简单地将
foreach
重写为
for
循环。@deathismyfriend,它们只在
core.getcompanys()时做同样的事情
如果多次调用,则不会执行不同的操作。@Joey yard唯一的功能是一个名称属性,它是一个字符串。两个代码都执行相同的操作。带有for循环的代码会更快。此外,这两个代码都可以优化一点,其中只有几行代码。即使是ReSharper也建议执行次优的、完全有害的操作,或者完全错误。不要盲目相信那些只应用简单规则的工具。在这种情况下,我怀疑这并不是在建议优化,而是简单地将
foreach
重写为
for
循环。@deathismyfriend,它们只在
core.getcompanys()时做同样的事情
如果多次调用,则不会执行不同的操作。@Joey yard唯一的功能是一个名称属性,它是一个字符串。两个代码都执行相同的操作。带有for循环的代码会更快。此外,这两个代码都可以优化一点,其中只有几行代码。即使是ReSharper也建议执行次优的、完全有害的操作,或者完全错误。不要盲目相信那些只应用简单规则的工具。在这种情况下,我怀疑这并不是在建议优化,而是简单地将
foreach
重写为
for
循环。@deathismyfriend,它们只在
core.getcompanys()时做同样的事情
如果多次调用,则不会执行不同的操作。@Joey yard唯一的功能是一个名称属性,它是一个字符串。两个代码都执行相同的操作。带有for循环的代码会更快。此外,这两个代码都可以优化一点,其中只有几行代码。即使是ReSharper也建议执行次优的、完全有害的操作,或者完全错误。不要盲目相信那些只应用简单规则的工具。在这种情况下,我怀疑这并不是在建议优化,而是简单地将
foreach
重写为
for
循环。@deathismyfriend,它们只在
core.getcompanys()时做同样的事情
如果多次调用,则不会执行不同的操作。@Joey yard唯一的功能是一个名称属性,它是一个字符串。