簡體   English   中英

快速復制scala中的對象內容

[英]fast copying object content in scala

我有一個Int和Double字段很少的類。 將所有數據從一個對象復制到另一個對象的方法是什么?

class IntFields {
  private val data : Array[Int] = Array(0,0)

  def first : Int = data(0)
  def first_= (value: Int) = data(0) = value
  def second : Int = data(1)
  def second_= (value : Int) = data(1) = value

  def copyFrom(another : IntFields) =
    Array.copy(another.data,0,data,0,2)
}

這是我建議的方式。 但我懷疑它是否真的有效,因為我對scala的內部結構沒有明確的理解

UPDATE1:

實際上我正在搜索scala相當於c ++ memcpy。 我只需要取一個簡單的對象並逐字節地復制它。

數組復制只是一個黑客,我已經搜索了正常的scala支持方法,並找不到。

UPDATE2:

我試過microbenchmark兩個持有者:簡單的案例類有12個變量,一個用數組備份。 在所有基准測試中(簡單復制和基於集合的復雜計算),基於陣列的解決方案的工作速度較慢,約為7%。

所以,我需要其他方法來模擬memcpy。

由於用於Array.copy兩個數組都是基本整數數組(即不是其中一個保持盒裝整數的情況,在這種情況下while使用裝箱/拆箱的while循環將用於復制元素),它是與Java System.arraycopy一樣有效。 也就是說 - 如果這是一個巨大的數組,你可能會看到與復制元素的while循環相比的性能差異。 由於數組只有2個元素,因此可能更有效:

def copyFrom(another: IntFields) {
  data(0) = another.data(0)
  data(1) = another.data(1)
}

編輯:

我想說最快的就是一個一個地復制字段。 如果性能非常重要,您應該考慮使用Unsafe.getInt - 有些報告它應該比使用System.arraycopy更快的小塊更快: httpsUnsafe.getInt -unsafe

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM