Przyspieszanie działania

0

Mam pytanie jak przyspieszyc dzialanie metody przeszukującej plik txt

ArrayList linie=new ArrayList();
		String tmp;
		ArrayList temp=new ArrayList();
		Pattern p = Pattern.compile(szukany);
				
		Matcher matcher;
		try{
			plik = new FileReader(nazwaplik);
			wejscie = new BufferedReader(plik);
			while((tmp=wejscie.readLine())!=null){
				matcher= p.matcher(tmp)	;	
				if(matcher.find())
					linie.add(tmp);
			}
			plik.close();
			wejscie.close();	
			long stop=System.currentTimeMillis();
			 System.out.println("Czas wykonania (w milisekundach): "+(stop-start));
		}

moze jakieś sugestie??

0

W zasadzie to niezbyt juz jest co przyspieszyc.
Masz juz bufforowane wejscie, pattern jest raz tylko skompilowany, reszta juz musi tak raczej zostac.

Uwaga na uboczu: Jak uzywasz klas z kolekcji typu List, ArrayList to zawsze okreslaj ich typ, w tym przypadku
List<String> linie = new ArrayList<String>()

0

Niech analiza odbędzie się poza blokiem try. W ten sposób przyspieszysz, bo regexpy nie będą wyliczane w bloku chronionym.

List<String> inputBuffer = new ArrayList<String>();
try{
                        plik = new FileReader(nazwaplik);
                        wejscie = new BufferedReader(plik);
                        while((tmp=wejscie.readLine())!=null){
                                 inputBuffer.add(tmp);
                        }
                        plik.close();
                        wejscie.close();
                        }cache(Exception e){

                        }        
                        for(String s : inputBuffer){
                                matcher= p.matcher(s);
                                if(matcher.find())
                                        linie.add(s);
                         }
                         long stop=System.currentTimeMillis();
                         System.out.println("Czas wykonania (w milisekundach): "+(stop-start));
                }

Pomimo, że każda linijka jest przerabiana dwa razy będzie to szybkie ponieważ czasochłonna operacja regexp+try/cache została pozbawiona narzutu bloku try/cache. Samo dodanie do listy try/cache i późniejsze pobranie jest znacznie szybsze niż próba matchowania każdej linii w try/cache.

0

Zrobiłem tak jak radziłeś jednak czas wykonania zwiększył się o jakieś 30%

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