Programozásról_szubjektíven - Szoftverfejlesztés fórum

Hirdetés

üzenetek

hozzászólások


pmonitor
(aktív tag)

Többször szóba került a sorba rendezés. Egyrészt a sebesség miatt, másrészt pedig hogy melyik lehet a legjobb. Itt a .NET-ben beépített rendezéseket hasonlítottam össze. A program kimenete a következő:
Array.Reverse: 6690
QuickSort: 4600
QuickSort "C": 4300
Array.Sort() delegate: 10316
Array.Sort() CompareTo: 12987
OrderBy: 54696

A beépített rendező módszerek közül az Array.Sort() bizonyult. A legrosszabb pedig az arr.OrderByDescending() bizonyult.

A nem beépített rendező algoritmus közül a következő rendezés még az Array.Sort()-nál is gyorsabb:
static void QuickSort(int[] arr2, int p, int r)
{
int Low, High, MidValue;
Low = p;
High = r;
MidValue = arr2[(p + r) / 2];
do
{
while (arr2[Low] > MidValue) ++Low;
while (arr2[High] < MidValue) --High;
if (Low <= High)
{
int T = arr2[Low];
arr2[Low] = arr2[High];
arr2[High] = T;
++Low;
--High;
}
} while (Low <= High);
if (p < High) QuickSort(arr2, p, High);
if (Low < r) QuickSort(arr2, Low, r);
}

Tapasztalatom szerint általában ezt a rendező algot célszerű használni, ha optimalizálni szeretnénk.
Ugyanezt az algot megcsináltam úgy, hogy C-ben írtam 1 "sortingsdll.dll" nevű .dll file-t.
A függvény törzsében karakterenként is ugyanaz az algo a C-ben írt .dll file-t használva C#-ban kb. 4-6 %-al gyorsabb.
Ez azt jelenti. hogy ha ragaszkodunk a C#-hoz, és sebességre akarunk optimalizálni, akkor mindenképpen azt célszerű választani(ha lehet), hogy C-ben írt .dll file-ba tesszük bele az adott függvényt, és ezt használjuk fel a C#-ban. Így nem mondunk le a C#-ban lévő gyors fejlesztésről, és mégis gyors programot írhatunk.

Itt írtam, hogy asm-ben minden magasabb szintű struktúra megvalósítható. Ugyanez a kijelentésem sztem. C-re is vonatkozik. Kiemelném a programom kimenetéből a következő kettőt:
Array.Reverse: 6690
QuickSort "C": 4300

Ebből egyértelműen látható, hogy a beépített Array.Sort() több mint 2 másodperccel lassabb, mint a C-s .dll függvényt használó kód. Azért ez nagyon nagy különbség(kb. 50%).

üzenetek