내 코드에서 정수의 문자열 표현을 long
및 double
값으로 변환해야합니다.long/double 버퍼에 대한 바이트/char 버퍼
문자열 표현은 바이트 배열 (byte[]
)입니다. 예를 들어, 숫자 12345
캐릭터 라인 표현을 위해 나는 long
로 변환 명백한 코드를 다음 (그리고 double
로 변환 거의 동일한 코드)이 코드는 예상 작품으로
private long bytesToIntValue()
{
string s = System.Text.Encoding.GetEncoding("Latin1").GetString(bytes);
return long.Parse(s, CultureInfo.InvariantCulture);
}
사용하여 현재 { 49, 50, 51, 52, 53 }
입니다, 하지만 내 경우에 나는 더 나은 것을 원한다. 그것은 현재 바이트를 문자열로 먼저 변환해야하기 때문입니다.
필자의 경우 bytesToIntValue()
은 약 1,200 만 번 호출되며이 방법에서는 전체 메모리 할당의 약 25 %가 수행됩니다.
물론이 부분을 최적화하고 싶습니다. 중간 문자열없이 변환을 수행하려고합니다 (+ 속도, - 할당).
무엇을 권하고 싶습니까? 중간 문자열없이 변환을 수행하려면 어떻게해야합니까? 전환을 수행하는 더 빠른 방법이 있습니까?
편집 : 나는 취급하고
바이트 배열은 항상 ASCII로 인코딩 된 데이터를 포함하고 있습니다. 숫자는 음수 일 수 있습니다. double 값의 경우 지수 형식이 허용됩니다. 16 진수는 허용되지 않습니다.
해답을 알려줘서 고맙지 만 질문은 '길다. 속도가 빠름'이 아니다. 그리고 그것이 있었다고하더라도, 3 배 속도 증가가 가치가있는 것입니다, imho. 어떤 프로세스가 3 시간 걸리는지 생각해보십시오 .-) – Bobrovsky
더 많은 서버/코어로 작업을 확장 할 수있을 것입니다. 때때로 가독성/유지 관리 성은 성능 이상의 가치가 있습니다. 또한, 나는 '길다. 빠르다'의 속도에 대해서가 아니라 'Byte []'를 가져 와서 'long'으로 파싱하는 전 과정을 말하고있다. –