この奇妙な問題に気付いたとき、私は自分のクラス ライブラリをプロファイリングして物事を最適化していました。
基本クラスがあり、そこから派生した他のクラスがあります。基本クラスにはパブリック プロパティがあります。コードの他の場所でこのプロパティを含む Linq クエリを実行しています。
現在、100,000 回の反復 (100 万回ではない) を実行すると、派生クラスに同じ名前のプロパティも追加するとわかります (インテリセンスは、「このプロパティは継承されたメンバーを非表示にします」というツールチップでそれを強調表示します)。したがって、基本的に ' Shortcut' (ただし、プロパティの重複) - コードは大幅に高速に実行されます... 私には 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);
}