Witajcie,

Mam taki problem .. aplikacja Swingowa.

W naszej aplikacji mamy coś na kształt excela napisane w javie. Cały arkusz nazywamy TableSheet w kodzie.

Sprawozdanie zawiera formularz -> formularze zawierają tabelki -> tabelki mogą zawierać wymiary.

Problem pojawia się gdy próbuje wygenerować dane testowe do sprawozdania które zawierają formularz z ogromną liczbą wymiarów ( wymiarem może być na przykład waluta )

Tabelka już jest TableSheetem ,a gdy pojawiają się wymiary to każdy wymiar jest nowym TableSheetem.

W ten sposób mam 2 sprawozdania w którym jedno ma 1721 tableSheetów a drugie 1921.

Algorytm działa w ten sposób, że pierwsza petla to lista tableSheetów .. druga petla w srodku to kolumny, a trzecia to wiersze.

Algorytmu nie można używać wielowątkowo bo do generacji danych testowych użyty jest kod, który i tak robi synchronized. Wszystkie wątki są zablokowane i czekaja aż jeden przejdzie.
Gdy zostawiam kompa na noc i przychodze rano to jest policzone 1300/1900 tableSheetów .. mam maszyne i7, 16 gb ram, dysk ssd.
Próbowałem analizować process profilerem i z pamięcią nie ma problemu a procesor nie wyrabia .. tak wolno przeszukuje te tableSheety.

Podejrzewam jednak, że ja gdzieś robie błąd bo powiedzmy pierwsze 50 tableSheetów leci dość szybko, dopiero po czasie algorytm znacznie zwalnia.
Podjrzewam dalej, że zwalnia ze względu na to, że aplikacja trzyma ciągle poprzednie już policzone tableSheety. Nie jestem niestety w stanie ich usunąć.

Jedyny pomysł na jaki wpadłem to po prostu napisać w bashu skrypcik który bedzie mi uruchamiał po 100 tablesheetów.

Co myślicie ?


Enterprise Developer
Wroclaw, Poland