当我注意到这个奇怪的问题时,我正在分析我的类库并优化事物:
有一个基类,我还有其他类,从它派生而来。基类具有公共属性。我正在执行涉及代码中其他地方的此属性的 Linq 查询。
现在,进行 100,000 次迭代(甚至不是一百万次),我可以看到,如果我还向派生类添加一个具有相同名称的属性(intellisense 用工具提示“此属性隐藏继承的成员”突出显示它),因此基本上是一个 '快捷方式'(但也是属性的重复) - 代码运行速度明显更快......对我来说是 350 毫秒。超过 100,000 次的迭代非常重要。
请问这是为什么?:) 可以做什么?
更多细节:
基类:
public abstract class ContentItem: IContent
{
internal ContentItem() { }
[DataMember]
[IndexedField(true, false)]
public string Guid { get; set; }
[DataMember]
[IndexedField(false, true)]
public string Title { get; set; }
}
派生的“POCO”:
[IndexedClass]
public class Channel : ContentItem, IContent
{
[DataMember(IsRequired = false, EmitDefaultValue = false)]
[ContentField]
public string TitleShort { get; set; }
}
存储库类(执行 linq 查询):(通用存储库)
public virtual T ByTitle(string title)
{
return All.Find(item => item.Title == title);
}
哪里All
是 aList<Channel>
并且有 2700 个项目。
测试代码:
private static void test(Content.Repository<Content.Channel> channels)
{
int iterations = 100000;
var watch = System.Diagnostics.Stopwatch.StartNew();
for (int i = 0; i < iterations; i++)
{
var channel = channels.ByTitle("Unique-Title");
}
watch.Stop();
Console.WriteLine("Done in {0} ms.", watch.ElapsedMilliseconds);
}