내가지도를 만들 때처럼 코드의 조각을 가지고 : 내 객체 생성이지도를 사용하여 다음스칼라 불변의지도 느린
val map = gtfLineArr(8).split(";").map(_ split "\"").collect { case Array(k, v) => (k, v) }.toMap
:
case class MyObject(val attribute1: String, val attribute2: Map[String:String])
을 나는 수백만을 읽고 있어요 반복자를 사용하여 MyObjects로 변환합니다.
MyObject("1", map)
처럼 나는 2'000'000 항목에 대해 1 시간보다 더 많은, 정말 느린 할 때.
는 내가 객체 생성에서지도를 제거하지만, 여전히 나는 분할 과정 (1 절) 수행
val map = gtfLineArr(8).split(";").map(_ split "\"").collect { case Array(k, v) => (k, v) }.toMap
MyObject("1", null)
그리고 스크립트 미만 1 분에서 실행 과정을. 2 천만 개 항목에 해당합니다.
어떤 프로파일 링을하고 객체가 생성 될 때 객체 맵에 val map
사이의 할당이 진행되는 것이 느껴집니다. 내가 뭘 놓치고 있니?
it.map(cretateNewObject).toList
: 당신이 내 코드를 볼 경우
(가) 내부 오브제로 각 라인을 변환 2,000,000 이상의 라인, 내가 반복하는 내 자신의 반복 처리를 설명 :
업데이트 문제를보다 잘 설명하기
이 반복자는 모든 행을 반복하고 함수 createNewObject
을 사용하여 내 객체로 변환합니다.
dk14는 큰 메모리를 사용하여 실제로 실제로 빠릅니다. 성능 문제는 내
`crateNewObject(val line:String)`
이 함수 내에서 내 함수가 라인을
`class MyObject(val attribute1:String, val attribute2:Map[String, String])`
객체를 생성하고 첫
이`val attributeArr = line.split("\t")`
배열의 첫 번째 속성 레코드가있다 할 것입니다 내 개체의 attribute1과 두 번째 특성은
입니다.`val map = attributeArr(8).split(";").map(_ split "\"").collect { case Array(k, v) => (k, v) }.toMap`
맵의 요소 수만 인쇄하면 프로그램이 2 분 만에 종료됩니다. 새 오브젝트 행에 맵을 전달하면 MyObject(attribute1, map)
프로그램이 실제로 느립니다.
두 번째 경우에는 어디에서나 val map을 사용하지 않으므로 컴파일러는 그 행에 코드를 버리고 아무 것도 분리하지 않습니다. – Kolmar
안녕하세요 @kolman 왜냐하면'gtfLineArr (8) .split (";") map (_ split "\" "). {case Array (k, v) => (k, v)} .toMap' 분할을 계산하고 그 결과를 Map으로 변환합니다. 실제로, gtfLineArr (8) .split (";"). map (_ split "\" "). {case Array (k, v) => (k, v)} .toMap.size'를 만들고 결과를 출력하면 Map이 생성되었음을 의미하는 1 분입니다. 내 의심스러운 것은지도가 새 객체에 전달되면 문제를 만드는 "일부"변환을 수행한다는 것입니다. – ypriverol
당신의 코드는 무엇을하고 있습니까? 시간은 아마도이 줄에 쓰이지 않을 것입니다. – Dima