java влияние на производительность захвата лямбда-паттерна в случае взаимодействия с базой данных - PullRequest
0 голосов
/ 13 марта 2020

Я использую лямбда-выражения для обеспечения закрытия результирующего набора и подключения к базе данных.

В приведенном ниже коде я собираю переменные типа (activeList, inActiveList, user) . Во многих местах было сказано, что, хотя привязка (одноразовая стоимость) и стоимость вызова одинаковы для захвата и не захвата лямбд, захват лямбд не эффективен из-за промежуточной «стоимости захвата». При каждом вызове должен быть создан лямбда-объект. Для не захвата лямбды это один раз, тогда последующие вызовы будут повторно использовать тот же объект. Но для захвата лямбды каждый раз, когда должен быть создан объект.

Я добавил свой фрагмент кода ниже. Этот тип захвата лямбд чаще встречается в коде моего веб-приложения. Я предполагаю, что так как количество запросов на выборку, выполняемых для каждого запроса, относительно мало, использование этого типа захвата лямбда-выражений не окажет значительного влияния на производительность. Это правильно, или я делаю неправильно.

User user = getUser(id);
List<Integer> activeList = new ArrayList<>();
List<Integer> inActiveList = new ArrayList<>();
HashMap<String, Object> h = new HashMap<>();

 DBUtil.execute(sqlQuery (rs) -> {
    String id = rs.getString("id");
    h.put("id", id)
    h.put("name", rs.getString("name"));

    if(user.isAdmin()){
      h.put("pay", re.getInt("pay"))
    }

    int status = rs.getInt("status");
    if(status == 1){
      activeList.add(id);
    } else if(status == 2){
      inActiveList.add(id);
    }

  })
static void execute(String sql, Consumer<ResultSet> iteratorFn) {
   try {
      Connection conn = getConn();
      Statement stmt = conn.createStatement(sql)
      ResultSet rs = stmt.executeQuery(sql);
      while(rs.next()){
        iteratorFn.accept(rs);
      }
      rs.close();
    } finally {
          if(stmt != null){
            stmt.close()
          }
          if(conn != null){
            conn.close()
          }
     }
}

Ссылка

https://ionutbalosin.com/2018/12/passing-thismethod-reference-within-a-loop-affects-performance/

https://www.infoq.com/articles/Java-8-Lambdas-A-Peek-Under-the-Hood/

...