SORU
18 Ocak 2009, Pazar


Diziler vs Listeleri performans

Yineleme sık ihtiyacınız olan ve çok sık yani dizisi/bir liste olması gerekir demek. Nedenleri farklı olabilir, ama döngü yüksek hacimli bir işleme iç en merkezinde olduğunu söylüyorlar.

Genel olarak, bir kullanarak Listelerini (Liste) boyutu esneklik nedeniyle tercih ederim. Bunun üzerine şu Web sitesini ziyaret Dokümantasyon talepleri Listeler DAHİLİ olarak bir dizi kullanmak ve bir o kadar hızlı (Reflektör ile hızlı bir göz bunu doğruluyor) yapmalıdır. Neverless, bazı ek yükü vardır.

Herkes aslında bu ölçü mü? yineleme 6M zamanlarda bir liste, bir dizi aynı zaman alacaktı?

CEVAP
18 Ocak 2009, Pazar


Çok kolay ölçmek için...

Sıkı döngü küçük bir parça kod işlemeuzunluğu sabit olduğunu biliyorumMikro-optimizasyon ekstra nebze diziler için kullanıyorum; diziler olabilirmarjinaldaha hızlıeğerform için dizin oluşturucu / kullanın - ama IIRC dizideki veri türüne bağlıdır inanıyorum. Ama tabii sengerekmikro-optimize, basit ve List<T> vb kullanmak için.

Tabii ki, bu verileri tüm okuyorsanız geçerlidir; bir sözlük anahtar tabanlı aramaları için daha hızlı olacaktır.

İşte benim sonuçlar kullanarak "" (ikinci numarası hepsi aynı işi yaptığını doğrulamak için bir sağlama toplamı): . int

(hata düzeltmek için düzenlenmiş)

List/for: 1971ms (589725196)
Array/for: 1864ms (589725196)
List/foreach: 3054ms (589725196)
Array/foreach: 1860ms (589725196)

test rig dayalı:

using System;
using System.Collections.Generic;
using System.Diagnostics;
static class Program
{
    static void Main()
    {
        List<int> list = new List<int>(6000000);
        Random rand = new Random(12345);
        for (int i = 0; i < 6000000; i  )
        {
            list.Add(rand.Next(5000));
        }
        int[] arr = list.ToArray();

        int chk = 0;
        Stopwatch watch = Stopwatch.StartNew();
        for (int rpt = 0; rpt < 100; rpt  )
        {
            int len = list.Count;
            for (int i = 0; i < len; i  )
            {
                chk  = list[i];
            }
        }
        watch.Stop();
        Console.WriteLine("List/for: {0}ms ({1})", watch.ElapsedMilliseconds, chk);

        chk = 0;
        watch = Stopwatch.StartNew();
        for (int rpt = 0; rpt < 100; rpt  )
        {
            for (int i = 0; i < arr.Length; i  )
            {
                chk  = arr[i];
            }
        }
        watch.Stop();
        Console.WriteLine("Array/for: {0}ms ({1})", watch.ElapsedMilliseconds, chk);

        chk = 0;
        watch = Stopwatch.StartNew();
        for (int rpt = 0; rpt < 100; rpt  )
        {
            foreach (int i in list)
            {
                chk  = i;
            }
        }
        watch.Stop();
        Console.WriteLine("List/foreach: {0}ms ({1})", watch.ElapsedMilliseconds, chk);

        chk = 0;
        watch = Stopwatch.StartNew();
        for (int rpt = 0; rpt < 100; rpt  )
        {
            foreach (int i in arr)
            {
                chk  = i;
            }
        }
        watch.Stop();
        Console.WriteLine("Array/foreach: {0}ms ({1})", watch.ElapsedMilliseconds, chk);

        Console.ReadLine();
    }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • campos9896

    campos9896

    24 Mart 2012
  • Dellbear816

    Dellbear816

    4 Mart 2008
  • ecf150king

    ecf150king

    20 Ocak 2006