Witajcie.
Ponieważ dalej walczę z klasą Thread, doszesłem do pewnych niezrozumiałych dla mnie wniosków.
Mam tablica, np:
object [,] tablica = new object [30000, 1000];
i teraz kiedy wypełniam ją pętlą danymi:
int intX = tablica.GetUpperBound(0)+1;
int intY = tablica.GetUpperBound(1)+1;
for (int iP = 0; iP< intY; iP++)
{
for (int iP2 = 0; iP2 < intX; iP2++)
{
tablica[iP2, iP] = iP2.ToString() + "/" + iP.ToString();
}
}
mojemu komputerowi zajmuje to ok 54 sekundy.
Kiedy robię to samo puszczając 5 wątków, z których każdy wykonuję jedną metodę z parametrem (w tablicy parametrów inicjuję najpierw indeks, od którego ma wątek rozpocząć wpisywanie do tablicy oraz ilość wierszy):
int[,] parametry = new int[5, 2];
private void ThreadTest2(object param1)
{
int indeksP = (int)param1;
int idKolumny = parametry[indeksP, 0];
int ilosc = parametry[indeksP, 1];
int intPX = tablica.GetUpperBound(0) + 1;
for (int ipk = idKolumny; ipk < idKolumny + ilosc; ipk++)
{
for (int ip = 0; ip < intPX; ip++)
{
tablica[ip, ipk] = ip.ToString() + "/" + ipk.ToString();
}
}
}
Myślałem, że puszczając wypłnianie w 5 wątkach na raz zyskam na czasie, a okazuje się, że nie.
Początkowo myślałem, że to z powodu tego, że wszystkie wątki używają jednaj globalnej statycznej tablicy, ale, gdy nakazałem im wypełniać swoje tablice, efekt jest taki sam.
Jak przyspieszyć zatem wypełnianie ogromnej tablicy wątkami?