C# WinForms ve Mono GTK SQL ve XML Gibi DataSource Tipleri

C# Fast Search In Memory

Generic listler, dizilere göre yavaş ve sınırlandırılmış yapısından dolayı kullanışsız kaldığı noktalar olabiliyor. Burada Webden aldığımız bir json verisinde arama yapmanın alternatif ve %10 daha hızlı bir yolunu kullanacağız.

static void Main(string[] args)
{
    Stopwatch sw = new Stopwatch();
    sw.Start();
    WebClient web = new WebClient();
    string jsdata = web.DownloadString("https://raw.githubusercontent.com/json-iterator/test-data/master/large-file.json");
    dynamic readdata = JsonConvert.DeserializeObject<dynamic>(jsdata);
    Console.WriteLine("Kaynak yüklendi : " + sw.ElapsedMilliseconds + " ms");
    sw.Stop();
    Console.WriteLine("----------------------------------------------------------");
    Stopwatch sw1 = new Stopwatch();
    sw1.Start();
    var stack = new Stack<dynamic>();
    foreach (var d in readdata)
    {
        stack.Push(d);
    }
    var found = stack.Where(x=>x.id==2489651045);
    Console.WriteLine("Liste arandı : " + sw.ElapsedMilliseconds + " ms");
    sw1.Stop();
    Console.WriteLine("----------------------------------------------------------");
    Console.WriteLine(JsonConvert.SerializeObject(found, Formatting.Indented));
}

Generic list örneğini ekleyerek karşılaştırmayı ortaya koymak istedim ama dynamic veriden kaynaklı olarak aynı kullanışlı yöntemle çağrım elde edilemedi. (Model üretmeye üşendim açıkçası 🙂 ) Output aşağıdaki gibidir.

Kaynak yüklendi : 6585 ms
----------------------------------------------------------
Liste arandı : 6586 ms
----------------------------------------------------------
[
  {
    "id": "2489651045",
    "type": "CreateEvent",
    "actor": {
      "id": 665991,
      "login": "petroav",
      "gravatar_id": "",
      "url": "https://api.github.com/users/petroav",
      "avatar_url": "https://avatars.githubusercontent.com/u/665991?"
    },
    "repo": {
      "id": 28688495,
      "name": "petroav/6.828",
      "url": "https://api.github.com/repos/petroav/6.828"
    },
    "payload": {
      "ref": "master",
      "ref_type": "branch",
      "master_branch": "master",
      "description": "Solution to homework and assignments from MIT's 6.828 (Operating Systems Engineering). Done in my spare time.",
      "pusher_type": "user"
    },
    "public": true,
    "created_at": "2015-01-01T15:00:00Z"
  }
]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir