我使用的是Visual Studio 2012,64位四核Windows 7操作系统,.Net framework 4.5.2。
Project是在Release模式下运行的控制台应用程序; JIT已禁用。
在C ++环境中,第一次迭代没有减速。在C#环境中,存在大幅减速。在其他类似的帖子中有人建议这是由于Jitting。但是,在通过工具 - >选项 - >调试 - >禁用JIT后,即时(并取消选中JIT复选框) - 没有可观察到的加速。以下是您可以自己尝试的示例。任何人都可以向我解释如何成为"完全编译"在执行申请之前?这是一个低迭代过程,我需要所有迭代才能快速执行。
private static void Main(string[] args)
{
int counter = 10;
while (counter != 0)
{
DoArray();
counter--;
}
}
public static void DoArray()
{
var stopwatch = new Stopwatch();
int[] set = {0, 1, 9, 10, 11};
int[] toRemove = {1, 14, 27, 40};
stopwatch.Start();
int[] removed = RemoveElementsFromSet(set, toRemove);
stopwatch.Stop();
if (removed.Length != 4)
throw new ApplicationException("ERROR");
Console.WriteLine("elapsed[ticks]: {0}", stopwatch.ElapsedTicks);
}
internal static int[] RemoveElementsFromSet(int[] set, int[] toRemove)
{
var removed = new int[set.Length];
int removedIndex = 0;
for (int i = 0; i < set.Length; i++)
{
if (toRemove.Contains(i))
continue;
removed[removedIndex] = set[i];
removedIndex++;
}
Array.Resize(ref removed, removedIndex);
return removed;
}
}
elapsed[ticks]: 6651 elapsed[ticks]: 7 elapsed[ticks]: 6 elapsed[ticks]: 6 elapsed[ticks]: 5 elapsed[ticks]: 5 elapsed[ticks]: 6 elapsed[ticks]: 5 elapsed[ticks]: 3 elapsed[ticks]: 2 Press any key to continue . . .