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
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:
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. –
Ya da kısaca: + 1, önce ölç, sonra kes! –