Sto usando Scala Enumeration ValueSets in un'impostazione abbastanza elevata, creando, testando, unione e intersecando circa 10 M set/secondo/core. Non mi aspettavo che questo fosse un grosso problema, perché avevo letto da qualche parte che erano supportati da BitSet, ma sorprendentemente ValueSet.isEmpty si presentava come un punto caldo in una sessione di profilazione con YourKit.Enumerazione Scala ValueSet.isEmpty slow
Per verificare, ho deciso di provare e reimplementare ciò di cui avevo bisogno utilizzando il BitSet Java, mentre cercavo di mantenere un po 'della sicurezza del tipo dell'uso di Enumerazioni Scala. (la revisione del codice è stata spostata su https://codereview.stackexchange.com/questions/74795/scala-bitset-implemented-with-java-bitset-for-use-in-scala-enumerations-to-repl) La buona notizia è che, cambiando solo i miei ValueSet su questi BitSet, ho effettivamente perso il 25% del mio tempo di esecuzione, quindi non so cosa stia davvero facendo ValueSet ma potrebbe essere migliorato ...
MODIFICA: L'analisi della sorgente ValueSet sembra indicare che isEmpty è sicuramente O (N), implementato utilizzando il SetLike.isEmpty generale. Considerando che ValueSet è implementato con un BitSet, si tratta di un bug?
MODIFICA: questo era il backtrace del profiler. Questo sembra un modo pazzo per implementare isEmpty su un set di bit.
"Non so cosa stia davvero facendo ValueSet sotto il cofano". La fonte è disponibile, se volessi dare un'occhiata: https://github.com/scala/scala/blob/v2.11.4/src/library/scala/Enumeration.scala#L1 –
Sembra che tu abbia un codice funzionante su cui vuoi un feedback. In questo caso, dovresti spostare la domanda su [codereview.se]. Altrimenti, per favore abbassa la tua domanda e rendi la domanda reale più evidente - mi ci è voluto un po 'per trovare anche quello che stavi chiedendo. –
Grazie, guardando ora. Finora sembra confermare ciò che ho trovato nel profiler (allegato); il ValueSet.isEmpty, almeno, è implementato interamente con algoritmi generici, trascurando che per un BitSet, non dovrebbe essere più difficile di (x == 0). – experquisite