view src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/xml/TimeMeasurementJuGrixFunction.java @ 17:917ecf2c7350

function Measurement
author one
date Wed, 24 Dec 2014 15:48:32 +0900
parents eed6235830c9
children 17cc11b04157
line wrap: on
line source

package jp.ac.u_ryukyu.ie.cr.tatsuki.xml;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Random;

import javax.xml.parsers.ParserConfigurationException;

import org.xml.sax.SAXException;

import jp.ac.u_ryukyu.cr.ie.tatsuki.bbs.JuGrix;

public class TimeMeasurementJuGrixFunction {

  static int roopCount = 10;
  static boolean useIndex = true;
  static LinkedList<Long> functionTimeLinkedList = new LinkedList<Long>();
  static int maxPersonCount = 1000;

  public static void main(String args[]) throws FileNotFoundException, ParserConfigurationException, SAXException,
      IOException {

    System.out.println("start : ");

    String orgId = "o:2";
    String personId = "p:1";
    LinkedList<String> filterIds = new LinkedList<String>();
    // filterIds.add("r:5");
    long t2;
    long t1;

    for (int personCount = 100; maxPersonCount >= personCount;) {

      JuGrix jugrix = extendXmlTree.createJuGrix(useIndex, personCount);
      Random random = new Random();

      functions(jugrix, orgId, personId, filterIds);

      functionTimeLinkedList = new LinkedList<Long>();
      long sumTime = 0;
      for (int count = 0; count < roopCount; count++) {

        int ran = random.nextInt(28);
        orgId = "o:" + String.valueOf(ran + 1);
        ran = random.nextInt(30);
        personId = "p:" + String.valueOf(ran + 1);
        t1 = System.currentTimeMillis();
        functions(jugrix, orgId, personId, filterIds);
        t2 = System.currentTimeMillis();
        sumTime = (t2 - t1) + sumTime;
        System.out.println(count + "回目=" + (t2 - t1) + "s");
      }

      getFunctionTimes(personCount);

      System.out.println("平均 = " + (sumTime / 10) + "s");
      personCount = personCount + 100;
    }
    System.out.println("end");
  }

  private static void getFunctionTimes(int personCount) throws IOException {
    
      for (int i = 0; i < 15; i++) {
      long time = 0;
      for (int j = 0; j < 10; j++) {
      long functionTime = functionTimeLinkedList.get(i + (j * 15));
      time = time + functionTime;
      }
      String functionName = "";
      switch (i) {
      case 0:
      functionName = "childOrganizationIds";
      break;
      case 1:
      functionName = "competentRoleId";
      break;
      case 2:
      functionName = "concurrentRoleIds";
      break;
      case 3:
      functionName = "deepChildOrganizationIds";
      break;
      case 4:
      functionName = "deepChildOrganizationIdsPlus";
      break;
      case 5:
      functionName = "deepParentOrganizationIds";
      break;
      case 6:
      functionName = "deepParentOrganizationIdsPlus";
      break;
      case 7:
      functionName = "deepPersonIds";
      break;
      case 8:
      functionName = "isActive";
      break;
      case 9:
      functionName = "parentOrganizationIds";
      break;
      case 10:
      functionName = "personIds";
      break;
      case 11:
      functionName = "roleDescriptionElementIds";
      break;
      case 12:
      functionName = "roleIds";
      break;
      case 13:
      functionName = "rolePriority";
      break;
      case 14:
      functionName = "stringPathToId";
      break;
      }
      File file = new File("./time/function/" + functionName);
      PrintWriter pw = new PrintWriter(new BufferedWriter(new
     FileWriter(file,
      true)));
      pw.println(personCount + " " + (time / 10));
      pw.close();
      System.out.println(functionName + " AVERAGE = " + (time / 10));
      }
  }

  private static void functions(JuGrix jugrix, String orgId, String personId, LinkedList<String> filterIds) {

    long t1 = System.currentTimeMillis();
    Iterator<String> tmp = jugrix.childOrganizationIds(orgId, filterIds, "v:1");
    for (; tmp.hasNext();) {
      tmp.next();
    }

    long t2 = System.currentTimeMillis();
    tmp = jugrix.competentRoleId(personId, "v:1");
    for (; tmp.hasNext();) {
      tmp.next();
    }
    long t3 = System.currentTimeMillis();
    tmp = jugrix.concurrentRoleIds(personId, "v:1");
    for (; tmp.hasNext();) {
      tmp.next();
    }

    long t4 = System.currentTimeMillis();
    tmp = jugrix.deepChildOrganizationIds(orgId, filterIds, "v:1");
    for (; tmp.hasNext();) {
      tmp.next();
    }

    long t5 = System.currentTimeMillis();
    tmp = jugrix.deepChildOrganizationIdsPlus(orgId, filterIds, "v:1");
    for (; tmp.hasNext();) {
      tmp.next();
    }

    long t6 = System.currentTimeMillis();
    tmp = jugrix.deepParentOrganizationIds(orgId, filterIds, "v:1");
    for (; tmp.hasNext();) {
      tmp.next();
    }

    long t7 = System.currentTimeMillis();
    tmp = jugrix.deepParentOrganizationIdsPlus(orgId, filterIds, "v:1");
    for (; tmp.hasNext();) {
      tmp.next();
    }

    long t8 = System.currentTimeMillis();
    tmp = jugrix.deepPersonIds(orgId, filterIds, "v:1");
    for (; tmp.hasNext();) {
      tmp.next();
    }

    long t9 = System.currentTimeMillis();
    jugrix.isActive(personId, "v:1");
    for (; tmp.hasNext();) {
      tmp.next();
    }

    long t10 = System.currentTimeMillis();
    tmp = jugrix.parentOrganizationIds(orgId, filterIds, "v:1");
    for (; tmp.hasNext();) {
      tmp.next();
    }

    long t11 = System.currentTimeMillis();
    tmp = jugrix.personIds(orgId, filterIds, "v:1");
    for (; tmp.hasNext();) {
      tmp.next();
    }

    long t12 = System.currentTimeMillis();
    tmp = jugrix.roleDescriptionElementIds(orgId, filterIds, "v:1");
    for (; tmp.hasNext();) {
      tmp.next();
    }

    long t13 = System.currentTimeMillis();
    tmp = jugrix.roleIds(orgId, filterIds, "v:1");
    for (; tmp.hasNext();) {
      tmp.next();
    }

    long t14 = System.currentTimeMillis();
    jugrix.rolePriority(personId, "r:34", "v:1");
    long t15 = System.currentTimeMillis();
    jugrix.stringPathToId("r:path:エスアールエルテクノシステム/臨検システム部/業務システムグループ", "v:1");

    long t16 = System.currentTimeMillis();
    functionTimeLinkedList.add(t2 - t1);
    functionTimeLinkedList.add(t3 - t2);
    functionTimeLinkedList.add(t4 - t3);
    functionTimeLinkedList.add(t5 - t4);
    functionTimeLinkedList.add(t6 - t5);
    functionTimeLinkedList.add(t7 - t6);
    functionTimeLinkedList.add(t8 - t7);
    functionTimeLinkedList.add(t9 - t8);
    functionTimeLinkedList.add(t10 - t9);
    functionTimeLinkedList.add(t11 - t10);
    functionTimeLinkedList.add(t12 - t11);
//    long aaa = (t12 - t11);
//    if (aaa > 500) {
//      System.out.println("aaaa---------------------------------------");
//      long t17 = System.currentTimeMillis();
//      Iterator<String> tmp = jugrix.personIds(orgId, filterIds, "v:1");
//      tmp.hasNext();
//      long t18 = System.currentTimeMillis();
//      System.out.println("all = " + (t18 - t17));
//      long t19 = System.currentTimeMillis();
//      tmp.hasNext();
//      long t20 = System.currentTimeMillis();
//      System.out.println("has next only = " + (t20 - t19));
//      if ((t20 - t17) > 100) {
//        System.out.println("aaaa---------------------------------------");
//        System.out.println(tmp.next());
//        System.out.println("aaaa---------------------------------------");
//      }
//    }
    functionTimeLinkedList.add(t13 - t12);
    functionTimeLinkedList.add(t14 - t13);
    functionTimeLinkedList.add(t15 - t14);
    functionTimeLinkedList.add(t16 - t15);
  }
}