Wydajność klasy OleDb w pracy z plikami .xlsx

0

Cześć,

Dostałem w pracy do napisania program, który ma nam pomóc w inwentaryzacja. Generalnie program przeszukuje różne komórki w jednym pliku Excela, wyciąga dane, zapisuje do innego itp. W trakcie pisania jednak otrzymałem pliki, które są znacznie większe niż to miało być pierwotnie (np. 9500 wierszów i 15 kolumn). Program zacząłem pisać używając do pracy klasy OleDb, która była mi trochę znana.

Niestety, napotkałem problem. Wydajność tego sposobu jest bardzo słaba. Jestem na początku pracy i już program debaguje się długie minuty. O ile finalna praca programu może i trwać godzinę, czy dwie i nie ma to dla mnie znaczenia, to jednak kiedy chce sprawdzić, czy napisany przeze mnie fragment działa poprawnie, za każdym razem mam na tyle długą przerwę, że mogę iść sobię zrobić kawę.

Czy są jakieś sposoby poprawienia wydajności pracy tego, co mam zrobić ?

Pozdrawiam.

2

Testuj kod za pomoca kodu.

Poczytaj o testach, sprawdzaj kazdy mozliwy branch za pomoca kodu (poczytaj AAA principle)

Nie testuj na prawdziwych danych tylko na mozliwych danych (bo co z tego ze uruchomisz algorytm dla miliona wierszy jak kazdy bedzie taki sam, to lepiej sprawdzic jeden wiersz). Sprawdz wszystkie edge-case (czyli takie ekstremalne/krawedziowe)

1

OleDB jest wolne, jeśli program może działać tylko z nowymi plikami excela (*.xlsx) znacznie lepszym i szybszym sposobem jest skorzystanie z Open XML SDK:
https://msdn.microsoft.com/en[...]ce/hh180830(v=office.14).aspx

Lub alternatywnie ale też tylko dla nowych exceli (*.xlsx) jest biblioteka:
https://github.com/jsegarra1971/SejExcelExport

0

Dzięki za odpowiedzi. Trochę mam spinę z czasem, więc nie zdążę poznać zasad testowania, ani tym bardziej nie napisze kodu od nowa, ale dało mi to do myślenia i faktycznie zmodyfikuje sobie formularz z excela na 10 wierszy zamiast 9500 i zastosuje różne warianty, żeby go na spokojnie dopracować ;) + okazało się, że w paru miejscach mogę znacznie kod uprościć.

No a potem na spokojnie zrobię tak jak napisaliście :)

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