Pet*_*etr 7 c# performance dictionary
问题很简单
是这段代码
public Dictionary<string, SomeObject> values = new Dictionary<string, SomeObject>();
void Function()
{
values["foo"].a = "bar a";
values["foo"].b = "bar b";
values["foo"].c = "bar c";
values["foo"].d = "bar d";
}
Run Code Online (Sandbox Code Playgroud)
和这段代码一样快
public Dictionary<string, SomeObject> values = new Dictionary<string, SomeObject>();
void Function()
{
var someObject = values["foo"];
someObject.a = "bar a";
someObject.b = "bar b";
someObject.c = "bar c";
someObject.d = "bar d";
}
Run Code Online (Sandbox Code Playgroud)
常识告诉我,在字典中查找引用一次并将其存储在某处应该更快,这样就不需要多次查找,但我真的不知道字典是如何工作的.
那么它更快还是没有?为什么?
是的,你是对的.您的第一种方法是进行4次字典查找,而第二次进行一次.第二个肯定更好.
然而,在现实生活中,字典查找的速度非常快,所以除非你有一本庞大的字典,否则差异不会很明显,甚至可能无法衡量.
乔是完全正确的,但似乎还不够,我做了一个简单明显的测试:
static void Main(string[] args)
{
var dict = new Dictionary<string, Foo>();
var number = 10000000;
for (int i = 0; i < number; i++)
{
dict[i.ToString()] = new Foo();
}
var watch = new Stopwatch();
watch.Start();
for (int i = 0; i < number; i++)
{
var key = i.ToString();
dict[key].A = "a";
dict[key].B = "b";
dict[key].C = "c";
dict[key].D = "d";
}
watch.Stop();
Console.Out.WriteLine(watch.ElapsedMilliseconds);
watch.Reset();
watch.Start();
for (int i = 0; i < number; i++)
{
var key = i.ToString();
var foo = dict[key];
foo.A = "a";
foo.B = "b";
foo.C = "c";
foo.D = "d";
}
watch.Stop();
Console.Out.WriteLine(watch.ElapsedMilliseconds);
}
class Foo
{
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
public string D { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的机器上,这输出到:
3423
2113
Press any key to continue . . .
Run Code Online (Sandbox Code Playgroud)
只有1次查找肯定会减少大数字的总时间.
| 归档时间: |
|
| 查看次数: |
317 次 |
| 最近记录: |