Java Perfomance fragen zum BufferedReader und string parsing

Habe es mal ausprobiert läuft in der Tat etwa 2 ms schneller wobei die größte Optimierung wohl darin liegt das er „DoStuff“ in einer for Schleife durchläuft.

Was in meinem Programm wohl aber anders aussehen würde da er dort einen Bufferredreader öffnen müsste dort zur gesuchten Zeile Springen und von dort noch einmal den Text auslesen ...

Edit: Wen man Dostuff weg lässt ist der unterschied 0 ms.

Code:
public class Main 
{
	
	private static String vertStart = "  <Property name=\"VertexStream\">";
	private static String vertEnd = "  </Property>";
	private static StringBuilder stringBuilder;
	
	
	public static void main(String[] args) throws IOException 
	{
		File file = new File("E:/Games/No Man's Sky/mod/NMSARC.1A1B4C22/MODELS/COMMON/SPACECRAFT/DRONE/DRONESHIP.GEOMETRY.MBIN.exml");
		BufferedReader in;
		stringBuilder = new StringBuilder();
		long time;
		int iterations = 100;
		
		//warm up
		for(int i = 0; i < 100 ; i ++)
		{
			stringBuilder = new StringBuilder();
			in = new BufferedReader( new InputStreamReader(new FileInputStream(file), "UTF8"));
			DoItInOneLoop(in);
	 		in.close();
			stringBuilder = new StringBuilder();
			in = new BufferedReader( new InputStreamReader(new FileInputStream(file), "UTF8"));
			DoItInTwoLoops(in);
	 		in.close();
			stringBuilder = new StringBuilder();
			in = new BufferedReader( new InputStreamReader(new FileInputStream(file), "UTF8"));
			GetVerts(in);
	 		in.close();
		}
		
		time = System.currentTimeMillis();
		for(int i = 0; i < iterations ; i ++)
		{
			stringBuilder = new StringBuilder();
			in = new BufferedReader( new InputStreamReader(new FileInputStream(file), "UTF8"));
			DoItInTwoLoops(in);
	 		in.close();
		}
		System.out.println((System.currentTimeMillis() - time) / iterations + " a");

		time = System.currentTimeMillis();
		for(int i = 0; i < iterations ; i ++)
		{
			stringBuilder = new StringBuilder();
			in = new BufferedReader( new InputStreamReader(new FileInputStream(file), "UTF8"));
			GetVerts(in);
	 		in.close();
		}
		System.out.println((System.currentTimeMillis() - time) / iterations + " b");	
		
		time = System.currentTimeMillis();
		for(int i = 0; i < iterations ; i ++)
		{
			stringBuilder = new StringBuilder();
			in = new BufferedReader( new InputStreamReader(new FileInputStream(file), "UTF8"));
			DoItInOneLoop(in);
	 		in.close();
		}
		System.out.println((System.currentTimeMillis() - time) / iterations + " c");
		
	}

	private static void DoItInOneLoop(BufferedReader _in) throws IOException
	{
		boolean gettingVertices = false;
		String currentLine;
		Point range = new Point(0,0);
		int index = 0;
  		while((currentLine = _in.readLine()) != null) 
		{
  			
			if(!gettingVertices && currentLine.equals(vertStart))
			{
				gettingVertices = true;
				range.x = index;
				continue;
			}
			
			if(gettingVertices && currentLine.equals(vertEnd))
			{
				range.y = index;
				for(int i = range.y - range.x; i > 0; i --)
					doStuff();
				return;
			}
			index ++;
		}
		return;
	}
	
	private static void DoItInTwoLoops(BufferedReader _in) throws IOException
	{
		String currentLine;
		Point range = new Point(0,0);
		int index = 0;
		
  		while((currentLine = _in.readLine()) != null) 
		{
			if( currentLine.equals(vertStart))
			{
				range.x = index;
				break;
			}
			index += currentLine.length();
		}
  		  		
  		while((currentLine = _in.readLine()) != null) 
		{
  			if(currentLine.equals(vertEnd))
			{
				range.y = index;
				for(int i = range.y - range.x; i > 0; i --)
					doStuff();
				return;
			}
			index ++;
		}
		return;
	}
	
	private static void doStuff()
	{
		stringBuilder.append(vertStart);
	}

	private static void GetVerts(BufferedReader _in) throws IOException
	{
		String currentLine;
 		boolean gettingVertices = false;
  		while((currentLine = _in.readLine()) != null) 
		{			
  			if(!gettingVertices && currentLine.equals(vertStart))
			{
				gettingVertices = true;
				continue;
			}
			if(gettingVertices)
			{
				if(currentLine.equals(vertEnd))
					return;
				doStuff();
			}
		}
	}
}
 
Zuletzt bearbeitet:
Zurück
Oben