SORU
28 ŞUBAT 2009, CUMARTESİ


Çok boyutlu bir dizi ve C dizi dizisi arasındaki farklar ne#?

Çok boyutlu diziler double[,] ve dizi-of-diziler double[][] C arasındaki farklar nelerdir#?

Eğer bir fark varsa, her biri için en iyi ne şekilde kullanılır?

CEVAP
28 ŞUBAT 2009, CUMARTESİ


Diziler (diziler tırtıklı) dizisi daha hızlı, çok boyutlu diziler ve daha etkili bir şekilde kullanılabilir. Çok boyutlu diziler daha güzel sözdizimi vardır.

Eğer yazdığınız bazı basit kod kullanarak pürüzlü ve çok boyutlu diziler ve daha sonra incelemek derlenmiş Meclisi ile IL çözücü göreceksiniz ki, depolama ve alma pürüzlü (veya tek boyutlu) diziler basit IL talimatları verirken, aynı işlemler için çok boyutlu diziler yöntem çağırmaları olan her zaman daha yavaş.

Aşağıdaki yöntemleri deneyin:

static void SetElementAt(int[][] array, int i, int j, int value)
{
    array[i][j] = value;
}

static void SetElementAt(int[,] array, int i, int j, int value)
{
    array[i, j] = value;
}

IL kendi şunlar olacaktır:

.method private hidebysig static void  SetElementAt(int32[][] 'array',
                                                    int32 i,
                                                    int32 j,
                                                    int32 'value') cil managed
{
  // Code size       7 (0x7)
  .maxstack  8
  IL_0000:  ldarg.0
  IL_0001:  ldarg.1
  IL_0002:  ldelem.ref
  IL_0003:  ldarg.2
  IL_0004:  ldarg.3
  IL_0005:  stelem.i4
  IL_0006:  ret
} // end of method Program::SetElementAt

.method private hidebysig static void  SetElementAt(int32[0...,0...] 'array',
                                                    int32 i,
                                                    int32 j,
                                                    int32 'value') cil managed
{
  // Code size       10 (0xa)
  .maxstack  8
  IL_0000:  ldarg.0
  IL_0001:  ldarg.1
  IL_0002:  ldarg.2
  IL_0003:  ldarg.3
  IL_0004:  call       instance void int32[0...,0...]::Set(int32,
                                                           int32,
                                                           int32)
  IL_0009:  ret
} // end of method Program::SetElementAt

Tırtıklı dizileri kullanarak kolayca takas ve satır satır yeniden boyutlandırma gibi işlemleri gerçekleştirebilirsiniz. Belki bazı durumlarda çok boyutlu dizi kullanımı daha güvenli olacaktır, ancak bu bile Microsoft FxCop pürüzlü diziler projeleri analiz etmek için kullandığınızda çok boyutlu yerine kullanılması gerektiğini söyler.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BASS212M

    BASS212M

    15 Temmuz 2009
  • Rooster Teeth

    Rooster Teet

    11 Temmuz 2006
  • Samantha Crain

    Samantha Cra

    30 EKİM 2008