Jestem w trakcie konczenia kalkulatora sieciowego na zaliczenie. Dla klasy C i B nie bylo problemu. Problem zaczal sie dla klasy A i bardzo duzej ilosci podsieci > 65534. Rozwiazalem to na dwa sposoby. Jednak zaden nie daje zadowalajacej szybkosci dzialania.
Sposob 1:
ListViewItem[] tablicaAdresow = new ListViewItem[iloscPodsieci];
for (int i = 0; i < iloscPodsieci; i++)
{
ListViewItem adres = new ListViewItem(new string[] { i.ToString(), "1.0.0.0", "1.0.0.1 - 1.0.0.2", "1.0.0.3"});
tablicaAdresow[i] = adres;
}
ListView1.BeginUpdate();
ListView1.Items.AddRange(tablicaAdresow);
ListView1.EndUpdate();
Sposob 2:
DataTable1.BeginLoadData();
DataTable1.BeginInit();
for (int i = 0; i < iloscPodsieci; i++)
{
DataRow wiersz = DataTable1.NewRow();
wiersz[0] = i.ToString();
wiersz[1] = "1.0.0.0";
wiersz[2] = "1.0.0.1 - 128.0.0.2";
wiersz[3] = "1.0.0.3";
DataTable1.Rows.Add(wiersz);
}
DataTable1.EndLoadData();
DataTable2.EndInit();
DataGridView1.DataSource = DataTable1;
Sposob 2 jest owiele szybszy od 1. Jednak i tak uzywajac drugiego sposobu i ustawiajac liczbe podsieci na 4194302, moge sobie isc kawe zrobic i zjesc cos jeszcze. Przy uzywaniu obu sposob uzycie procesora skacze do 100% i program zaczyna tez pochlaniac coraz wiecej pamieci jak dodaje kolejne elementy.
Dla przykladu ponizej link do innego kalkulatora sieciowego, w ktorym nie ma tego problemu:
http://www.download.net.pl/1730/Advanced-IP-Address-Calculator/
Ustawiam w nim duza liczbe podsieci i nawet nie widac kiedy on to oblicza. Z tym, ze okno z lista adresow nie jest na glownym formularzu tylko na oddzielnym. U mnie wszystkie kontrolki umiescilem na jednym formularzu.
Jakies pomysly jak przyspieszyc proces dodawania duzej liczby elementow do ListView/DataGridView? Albo moze sa jakies inne kontrolki do tego przeznaczone? Bede wdzieczny za pomoc [browar]