Dostęp do elementó tablicy

0

Cześć.

W moim programie mocno skupiam się na wydajności.
Wąskim gardłem okazują się wykonywane w pętli operacje.
Operacje te to sięganie do tablicy.

W jaki sposób można przyśpieszyć dostęp do zmiennych, tablicy, obiektów? Jest na to jakiś sposób aby dostęp do tablicy był szybszy?
Wskaźnik odpada, gdyż podczas działania pętli nie wiadomo do jakiego elementu trzeba się dobrać, więc sam wskaźnik nie wiadomo o ile należy przesunąć.

0

Wskaźnik odpada, gdyż podczas działania pętli nie wiadomo do jakiego elementu trzeba się dobrać, więc sam wskaźnik nie wiadomo o ile należy przesunąć.

Jak nie wiadomo? To jakiej Ty tablicy używasz?

0

Nie wiadomo bo elementy są pobierane randomowo.

0

Pokaż kod, bo jakoś nie mogę sobie tego wyobrazić

0

Nie mam teraz przy sobie kodu, ale niby co w tym trudnego do wyobrażenia?

int zmienna = tablica[rand.next(50)];

prosty przykład. Mniej-więcej tak to wygląda.

0
int r = rand.Next(50); //<-- wylosowana liczba nie jest 'nieznana'
int zmienna = tablica[r];

Żeby przyspieszyć możesz wyłącz sprawdzanie czy nie przekraczasz tablicy. Przykład:

int[] fib;
fib = new int[100];
unsafe fixed ( int* p = fib )   
{
    p[0] = p[1] = 1;
    for( int i=2; i<100; ++i ) p[i] = p[i-1] + p[i-2];
}

źródło: http://msdn.microsoft.com/en-us/library/a3hd7ste(VS.80).aspx

0

I co z tego?
Przecież teraz muszę dopisać zmienną do kolejnej zmiennej (kolejny cykl procesora), następnie odwołać się do wskaźnika i go przesunąć (kolejne cykle procesora).

W rzeczywistości wyjdzie wolniej niż jest teraz.

0

Ok, dzięki. To może zadziałać. Jak będę tylko mógł to sprawdzę.

0
MomentObrotowy napisał(a):

Przecież teraz muszę dopisać zmienną do kolejnej zmiennej (kolejny cykl procesora), następnie odwołać się do wskaźnika i go przesunąć (kolejne cykle procesora).

Kod wygenerowany przez kompilator nie wygląda dokładnie tak, jak napisany przez programistę. To, że zdefiniujesz sobie jakąś pomocniczą zmienną, nie znaczy, że w kodzie wynikowym taka się znajdzie.

0

Ok, dzięki wszystkim za odpowiedzi. Zrobiłem to za pomocą wskaźników oraz dodatkowo stackalloc podczas tworzenia tablicy do, której mam mnóstwo odwołań.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0