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

  • Evan Coury

    Evan Coury

    29 NİSAN 2007
  • stokelycalm

    stokelycalm

    28 Aralık 2010
  • TantalizingTrance

    TantalizingT

    15 ŞUBAT 2009