我剖析我的类库和优化的事情,当我发现这个奇怪的问题:性能损失在基类中访问属性(C#)
有一个基类,我有其他类,源自它。 基类有一个公共属性。 我正在做代码中其他地方涉及此属性的Linq查询。我可以看到,如果我还向派生类中添加了一个具有相同名称的属性(智能感知使用工具提示高亮显示它“此属性隐藏了继承的成员”),因此,可以执行100,000次迭代(甚至不是一百万次)基本上是一个'快捷方式'(但也是财产的重复) - 代码运行速度明显更快...对我来说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
是List<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);
}
你能分享代码来重现这一点,以及你用于基准测试的代码吗? – vcsjones
yep,brb,离开办公室,回家 – Denis
您用于基准测试的代码 –