2014-12-25 25 views
6

başvurumu varsayalım üzerinde ve uzun bir dönem ProgID üzerinde Move nesnelerin bir çok kullanır aşağıdaki şekilde nerede Move tanımlanır:Yeniden örneklerini

10 farklı olası Input s var
sealed trait Player 
case object P1 extends Player 
case object P2 extends Player 
case object P3 extends Player 
case object P4 extends Player 

sealed trait Key 
case object Up extends Key 
case object Down extends Key 
case object Right extends Key 
case object Left extends Key 
case object Space extends Key 

sealed trait Action 
case object Press extends Action 
case object Release extends Action 

case class Input(key: Key, action: Action) 
case class Move(input: Input, player: Player) 

ve 40 farklı Move s. Derleyiciden tüm olası Move s'yi bir kez oluşturarak ve örnekleri zaman içinde yeniden kullanarak bu türleri optimize etmesini istemek için bir yol var mı?

val moveCache = Memo.mutableHashMapMemo{ip: (Input, Player) => Move(ip._1, ip._2)} 
.... 
val myMove = moveCache((myInput, myPlayer)) 

Dürüst ben çok şüphe bu performansı üzerinde önemli bir etkisi olacaktır:

cevap

4

Bir scalaz Memo kullanabilirsiniz. Kodunuzu daha az okunabilir hale getirmeden önce, gerçekten düşündüğünüz farkı yarattığını gösteren net profil oluşturma sonuçlarına sahip olduğunuzdan emin olun.

+3

Modern jenerasyon GC üzerinde nesne ayırma * çok hızlı *. 'Malloc' den daha hızlı, yığın tahsisi kadar hızlı. Kısa ömürlü küçük değişmez nesnelerin çöp toplanması da son derece hızlıdır. Nesne havuzlama veya önbellekleme ile, temelde GC'yi hızlı hale getiren varsayımları temelden koparırsınız: yapay olarak onların ömrünü uzatırsınız (artık kısa ömürlü olmazlar), daha uzun ömürlü dev bir nesneyi (önbellek veya havuzun kendisi) tanıtmış olursunuz. ve kullanım durumunuza bağlı olarak, nesneleri başka bir eyalette yeniden kullanmak zorunda kalmayacak şekilde değiştirilemez hale getirebilirsiniz. –

+1

Ya da kısaca: + 1, önce ölç, sonra kes! –