네임 스페이스 및 사용자 정의 함수 성능사용자 정의 함수 라이브러리를 만들 때 함수가 전역 네임 스페이스에 있는지 또는 사용자 정의 네임 스페이스에 있는지에 따라 동일한 함수 코드의 성능에 현저한 차이가 있음을 알았습니다. 적어도 하나의 좌절스러운 경우에는 전역 네임 스페이스와 비교하여 사용자 정의 네임 스페이스에있을 때 동일한 함수를 실행하는 데 7 배가 걸립니다.
차이점은 많은 응용 프로그램에서 중요하지 않지만 500K ~ 5M 행의 테이블에서 이러한 함수를 사용하고 있습니다. 이 크기의 차이는 괜찮은 기능과 사용할 수없는 기능의 차이를 만듭니다.
차이점을 보여주는 몇 가지 JSL은 다음과 같습니다.
Names Default to Here(1);
Add Custom Functions(
globaltest = New Custom Function(
"Global",
"test123",
Function({x, y, z},
{a, b, c},
a = x;
b = y;
c = z;
Return(c)
)
)
);
Add Custom Functions(
nstest = New Custom Function(
"other",
"test123",
Function({x, y, z},
{a, b, c},
a = x;
b = y;
c = z;
Return(c)
)
)
);
For(i = 1, i <= 10000, i++,
foo = ::test123(i, i, i);
);
For(i = 1, i <= 10000, i++,
foo = other:test123(i, i, i);
);내 컴퓨터에서 :: test123 ()은 143ms에서 실행되지만 other : test123은 343ms가 걸립니다.
사용자 지정 네임 스페이스 또는 클래스 메서드로 구현하려는 이상적인 기능이 있지만 네임 스페이스 자격과 관련된 오버 헤드로 인해이 기능을 사용할 수 없습니다.
다른 사람들이 이것을 알아 차 렸으며 네임 스페이스로 한정 된 함수의 호출 속도를 높일 수있는 기술 / 고려 사항이 있습니까?
Re : 네임 스페이스 및 사용자 정의 함수 성능스크립팅 안내서 p 896을 살펴보면 이것에 대한 몇 가지 언급을 발견했습니다. 나는 그곳을 먼저 보는 것으로 알고 있었어야했다. 가장 큰 팁은 속도가 중요한 경우 함수보다 식을 선호하는 것 같습니다. 또한 Return () 문이 속도가 느려진 것을 알지 못했습니다. 다른 팁은 감사하게받을 것입니다.
Re : 네임 스페이스 및 사용자 정의 함수 성능return (), break () 및 continue ()는 모두 동일한 동작을 갖습니다. JSL을보다 쉽게 읽고 유지 보수 할 수 있지만 실행시 약간의 오버 헤드가 있습니다. JSL 프로파일 러가 핫스팟이면 지적 할 것입니다.
예, 네임 스페이스에도 페널티가 있음을 알았지 만 복잡한 프로젝트에 사용하려고합니다. 핫스팟으로 판명 된 간단한 변수의 경우 아래와 같이 복사, 복사 전략을 사용할 수 있습니다. (프로필 우선, 속도를 늦추지 않는 코드를 최적화하지 마십시오!)
다음은 네임 스페이스를 사용하는 것 외에는 거의 아무것도하지 않습니다. 대부분의 코드는 네임 스페이스를 사용하는 데 큰 페널티를받지 않습니다. @EvanMcCorkle
test = New Namespace(
"test"
);
f = Function( {},
{i, testx},
test:x = 0;
If( useLocal, // speed up by copy-in, copy-out
testx = test:x;
For( i = 1, i < 1e6, i += 1,
testx = testx + 1
);
test:x = testx;
, // no speed up
For( i = 1, i < 1e6, i += 1,
test:x = test:x + 1
);
);
);
useLocal = 0;
t0 = Tick Seconds();
f();
t1 = Tick Seconds();
Show( useLocal, t1 - t0, test:x );//t1 - t0 = 2.76666666666642;
useLocal = 1;
t0 = Tick Seconds();
f();
t1 = Tick Seconds();
Show( useLocal, t1 - t0, test:x );//t1 - t0 = 0.316666666665697;Re : 네임 스페이스 및 사용자 정의 함수 성능인아웃 전략을 시도해 보겠습니다 !!! 감사합니다 Craige !!!!