msgpack-java icon indicating copy to clipboard operation
msgpack-java copied to clipboard

MapValue#equals too slow

Open xuwei-k opened this issue 9 years ago • 1 comments

version 0.7.0-p2

import org.msgpack.value._

object Main {

  def mapValueEqualsTime(size: Int): Unit = {
    val keyValues: Array[Value] = (1 to size).flatMap{ key =>
      Seq(ValueFactory.newString(key.toString), ValueFactory.nilValue())
    }.toArray
    val map1, map2 = ValueFactory.newMap(keyValues)
    println(size)
    System.gc
    val start = System.nanoTime
    map1 == map2
    println((System.nanoTime - start) / 1000000.0)
    println
  }

  def main(args: Array[String]) {
    mapValueEqualsTime(10)
    mapValueEqualsTime(100)
    mapValueEqualsTime(1000)
    mapValueEqualsTime(10000)
    mapValueEqualsTime(100000)
  }

}

result

10
1.634357

100
4.078424

1000
10.137222

10000
183.871329

100000
22959.867596

xuwei-k avatar Dec 24 '14 06:12 xuwei-k

New MapValue.equals is implemented by translating the value into a Map: https://github.com/msgpack/msgpack-java/blob/v07-develop/msgpack-core/src/main/java/org/msgpack/value/impl/ImmutableMapValueImpl.java#L137-137

This implementation still might have this performance problem.

xerial avatar Jun 23 '15 11:06 xerial