public static int BD(int[] arr,Dictionary<int,int> dic) { int a = 0; foreach(var ka in arr) foreach (var kv in dic) if (ka==kv.Value) { a= 1; return a; } return a; }
求解:经测试在C#中调用方法都非常耗时,如代码所示的方法调用耗时00:00:00.0002608如果不封装方法同样是这个代码耗时00:00:00.0000065,求教高手调用方法如何提速?
方法调用的耗时真的是性能调优的关键点么,能产生大的收益么。我想是不会的。
比如这个方法,要优化,从代码上去优化比实现内联函数要有收益的多。比如空间换时间,比如用C++。
另 可以看一下:TargetedPatchingOptOut
arr和dic哪个count多?
而且这个你明显可以对dic只遍历1次,第一次把dic的key和value对调塞到新的dictionary中去,重复的忽略。然后对arr做遍历,直接用dictionary的索引方式直接定位数据。
直接写汇编速度会更快的,有追求的人才不写C#呢。
public static int BD(int[] arr, Dictionary<int, int> dic)
{
var a = 0;
var set = new HashSet<int>(dic.Values);
if (arr.Any(ka => set.Contains(ka)))
{
a = 0;
}
return a;
}
if 里面 a=1;