10000 人の若者と 10000 人の高齢者を作成し、2 つの別々のリストに追加する簡単なコンソール アプリケーションを作成しました。次に、いくつかのクエリを実行して、パーソナリティに基づいて情報を取得します。
class Program
{
static void Main(string[] args)
{
private Random random = new Random();
private List<Person> youngerPersons = new List<Person>();
private List<Person> olderPersons = new List<Person>();
private long samePersonalityMatches = 0;
for (int i = 0; i < 10000; i++)
{
youngerPersons.Add(new Person(RandomString(10), DateTime.Now.ToString(), RandomString(4), random.Next(10, 50),(Person.PersonalityType)random.Next(0, 4), i));
}
for (int i = 0; i < 10000; i++)
{
olderPersons.Add(new Person(RandomString(10), DateTime.Now.ToString(), RandomString(4), random.Next(51, 120),(Person.PersonalityType)random.Next(0, 4), i));
}
//Example query 1
foreach (Person person in youngerPersons.Where(w => w.Id > 4567 && w.Age > 70))
{
Console.WriteLine(person.Id);
}
//Example query 2
foreach (Person person in youngerPersons)
{
foreach (Person olderPerson in olderPersons)
{
if (person.Personality == olderPerson.Personality)
{
samePersonalityMatches++;
}
}
}
Console.WriteLine("Number of matches: " + samePersonalityMatches);
}
private static Random random = new Random((int)DateTime.Now.Ticks);
private static string RandomString(int size)
{
StringBuilder builder = new StringBuilder();
char ch;
for (int i = 0; i < size; i++)
{
ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
builder.Append(ch);
}
return builder.ToString();
}
}
internal class Person
{
public enum PersonalityType
{
Funny = 0,
Boring = 1,
Serious = 2,
Grumpy = 3,
Normal = 4
}
public Person(string name, string dateofbirth, string nickname, int age, PersonalityType personalityType, int id)
{
this.Name = name;
this.Dateofbirth = dateofbirth;
this.Nickname = nickname;
this.Age = age;
this.Id = id;
this.Personality = personalityType;
}
public string Name { get; set; }
public string Dateofbirth { get; set; }
public string Nickname { get; set; }
public int Age { get; set; }
public int Id { get; set; }
public PersonalityType Personality { get; set; }
}
基本的に、コードに記述した両方のサンプル クエリのパフォーマンスを最大限に引き出すためのベスト プラクティスを理解したいと思います。交差の使用に関するパフォーマンス関連の資料をいくつか読みましたが、最大のパフォーマンスを得るためにいつ、どれを使用するのが最適かわかりません。リストは少し OTT (サイズに関して) ですが、実行するのがより興味深い例 2 になりました。