相关疑难解决方法(0)

为什么比包含更慢?

我设计了以下测试:

var arrayLength=5000;
object[] objArray=new object[arrayLength];

for(var x=0;x<arrayLength;x++)
{
    objArray[x]=new object();
}
objArray[4000]=null;
const int TestSize=int.MaxValue;

System.Diagnostics.Stopwatch v= new Stopwatch();
v.Start();
for(var x=0;x<10000;x++)
{
    objArray.Contains(null);
}
v.Stop();
objArray.Contains(null).Dump();
v.Elapsed.ToString().Dump("Contains");

//Any ==
v.Reset();
v.Start();
for(var x=0;x<10000;x++)
{
    objArray.Any(o=>o==null);
}
v.Stop();
objArray.Any(x=>x==null).Dump();
v.Elapsed.ToString().Dump("Any");

//Any Equals
v.Reset();
v.Start();
for(var x=0;x<10000;x++)
{
    objArray.Any(obj=>object.Equals( obj,null));
}
v.Stop();
objArray.Any(obj=>object.Equals( obj,null)).Dump();
v.Elapsed.ToString().Dump("Any");
Run Code Online (Sandbox Code Playgroud)

null不存在时的结果:

  • Contains False 00:00:00.0606484
  • Any == False 00:00:00.7532898
  • Any object.Equals False 00:00:00.8431783

当元素4000存在null时:

  • Contains True 00:00:00.0494515
  • Any == True 00:00:00.5929247
  • Any object.Equals True 00:00:00.6700742

当元素10出现null时: …

c# performance

8
推荐指数
1
解决办法
518
查看次数

分配带参数的委托

我正在查看BackgroundWorker.ReportProgress方法.它可以采用1个参数(int)或两个参数(int,object).

如果我想像这样分配ReportProgress:

var ReportProgressMethod = backgroundWorker.ReportProgress;
Run Code Online (Sandbox Code Playgroud)

我得到一个错误,说有一个模糊的引用,因为(当然)该方法可以采取参数集.

如何更改上述语句以表示我想使用int, object该方法的版本.

(这背后的想法是我想将ReportProgressMethod作为参数传递给方法.)

.net c# delegates c#-3.0

2
推荐指数
1
解决办法
645
查看次数

标签 统计

c# ×2

.net ×1

c#-3.0 ×1

delegates ×1

performance ×1