Резюме для программиста
Если вы такой умный, то как вы можете до сих пор вестись на этот троллинг? ))
Я с айти ушёл, потому-что там выпендриваются типа мурр, и друг другу хотят показать свои знания. Если не умеешь то начинают всякое клеймо ставить, типа на неспособность в программирование, только погрубее. Допустим этот программер - https://yvision.kz/u/Hes говорил мне, что я не умею программировать на net, а у самого там много дизлайков. Со своим LINQ он мне весь плешь проел см. https://yvision.kz/post/429471 и https://yvision.kz/post/435356. Только из-за него и учил этот LINQ, провёл исследования, LINQ немного медленно работает. исследование простые - в начале до LINQ и foreach ставите DateTime Now, в конце LINQ и foreach ставите опять DateTime Now, а потом сравниваете 2 даты до и после, у меня на простые LINQ уходит где-то примерно 4 сек., а если сделать сложные LINQ и очень много записей, особенно на сервере - то всё замёрзнет напрочь и будет программа или сервер еле еле шевелиться, в Германии распространён тонкий клиент-сервер (так немцы экономят денюжки), покупают один сервер, покупают для сервера Client Access License, покупают 10-100 тонких клиентов, потом настраивают, а пользователь включает тонкий клиент, который подключается к Windows Server через сеть или Wi-Fi, если там будут сидеть одновременно ну скажем 20 пользователей, и будут выполняться тяжёлые и сложные LINQ, весь сервер просто замёрзнет, из-за того что будет много съедаться памяти см.:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace LINQTest { public partial class Form1 : Form { private DateTime tm1; public Form1() { // tm1 = DateTime.Now; InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { const int MAX_RECORDS = 6000; String[] firstnames = new String[] { "Ольга", "Наталья", "Марина", "Александра", "Ирина", "Екатерина", "Сабина", "Элеонора", "Елезавета" }; String[] lastnames = new String[] {"Попова", "Шевченко", "Найденко", "Сидорова", "Еремеева", "Шабанова", "Иванова", "Ким", "Пушкина", "Лысенко", "Квашенко", "Зайцева", "Краскова", "Даренко", "Абрамушина", "Березовская", "Касымова", "Чечмарёва", "Надымова", "Кокина", "Кабаева", "Лебедева", "Соколова", "Кузнецова", "Новикова", "Морозова", "Дроздова", "Дудь", "Порхоменко", "Надымова", "Викулова", "Здорова", "Краскова", "Гудкова", "Грудинина", "Конь", "Шишков", "Рыжкова", "Жукова", "Дмитриев", "Порхоменко", "Мухина"}; String[] stations = new String[] { "Онкология", "Пульмунология", "Гастрэнторология", "Травматология", ""}; Person[] persons = new Person[MAX_RECORDS]; Hospital[] hospital = new Hospital[MAX_RECORDS]; Random rnd = new Random(); Random rnd2 = new Random(); Random rnd3 = new Random(); Random rnd4 = new Random(); Random rnd5 = new Random(); Random rnd6 = new Random(); for (int j = 0; j < MAX_RECORDS; j++) { persons[j] = new Person(); persons[j].personID = j; persons[j].FirstName = firstnames[rnd.Next(0, firstnames.Length)]; persons[j].LastName = lastnames[rnd2.Next(0, lastnames.Length)]; persons[j].Birthday = new DateTime(rnd3.Next(1920, 1980), rnd3.Next(1, 12), rnd3.Next(1, 20)); } for (int j2 = 0; j2 < MAX_RECORDS; j2++) { hospital[j2] = new Hospital(); hospital[j2].PersonID = rnd4.Next(0, MAX_RECORDS); int day = rnd5.Next(1, 20); int month = rnd5.Next(1, 8); hospital[j2]._From = new DateTime(2018, month, day); hospital[j2]._To= new DateTime(2018, month+rnd5.Next(1, 4), day+5); hospital[j2].Station = stations[rnd6.Next(0, stations.Length)]; } tm1 = DateTime.Now; // засекаем отсюда время var results = from p in persons from h in hospital where p.personID == h.PersonID select new { p.FirstName, p.LastName, p.Birthday, h.Station, h._From, h._To }; this.dataGridView1.DataSource = results.ToList(); this.txtCount.Text = MAX_RECORDS.ToString(); TimeSpan ts= DateTime.Now - tm1; // вычисляем время this.txtTime.Text = ts.Seconds.ToString() + " сек."; /*foreach (var r in results) { //this.listBox1.Items.Add(r.FirstName + " " + r.LastName + " " + r.Birthday + " "+ r._From + " " + r._To); }*/ } } }
Вот результат 4 сек, всего 6 тыщ записей:
https://i.ibb.co/5YRjq4r/1-min.jpg
Этот код я делал в 2019 или 2020 году, сейчас посмотрел и вроде заметил ошибку, я тогда только начинал заниматься LINQ.