문제

나는 현재 웹 서비스에서 사용할 API를 구축하고 있습니다.

많은 양을 사용하여 API를 구축하면 어떤 성능 문제를 충족시킬 수 있는지 궁금합니다. 정적 방법.

원래 아이디어는 서비스 역할을하는 전문가 객체를 구축하는 것이 었습니다.

단일 사용자 환경 에서이 접근법은 훌륭했습니다! 그러나 곧 이것을 다중/동시 사용자 환경에 포트해야합니다.

이런 종류의 아키텍처에서 어떤 종류의 성능 문제가 발생할 수 있습니까?

친애하는,

편집하다:

정적 메소드는 정적 변수가 없으며 부작용이 없습니다. 그들은 단순히 모든 것이 인스턴스화되는 정상적인 루틴을 실행합니다. (즉, vars and objects)

도움이 되었습니까?

해결책

동시성에는 특별한 영향이 없습니다. 동일한 규칙이 사실입니다. 공유 데이터를 동시에 돌리는 것은 나쁘다. 인스턴스 방법이 있지만 아무것도 돌연변이하지 않으면 괜찮습니다.

일반적인 디자인에는 차이가 있습니다. 정적 메소드는 거의 항상 스레드 안전이어야합니다 (예 : 만들다 인스턴스 메소드는 일반적으로 될 필요는 없지만 (클래스의 스레드 안전성을 문서화해야하지만) 인스턴스 메소드가 필요하지 않습니다.

다른 팁

나는 성능 문제 (KNUTH)에 대해 너무 걱정하지 않을 것입니다. 나는 멀티 스레드 환경에서 테스트 가능성 및 상태 관리 문제에 더 관심이있을 것입니다. 가끔 성능 문제.

정적을 조롱 할 수 없으므로 정적 메소드를 기반으로하는 API를 사용하는 코드는 비교적 테스트 할 수없는 IMHO입니다. 실제로 당신이 요구하는 것이 아니라 API를 사용할 사람들에 대해 생각하십시오.

공유 데이터가 스레드간에 유지되는 지점을 절대 최소값으로 줄여야합니다. 이것은 스레딩 문제의 가능성을 줄입니다. 이 작업에 약간의 효율성이 떨어질 것입니다. 그러나 코딩 및 유지 보수가 쉽게 얻을 수 있습니다. 모든 페이지가 정적 인 경우 ASP.NET 응용 프로그램을 작성하고 테스트하는 것이 얼마나 어려운지 상상해보십시오. 악몽 일 것입니다. API가 시간이 지남에 따라 기능을 얻을 때 그 도로를 내려갈 수 있습니다.

또한 괜찮은 DI 프레임 워크를 사용하십시오 (나는 Unity가 P & P에서 나오는 가장 좋은 일일 수 있습니다).

정적 방법에서 로컬 변수에 대해 걱정할 필요가 없습니다. 각 스레드에는 자체 스택이 있으며 메소드로의 각 호출은 스택에서 로컬 변수의 별도 사본을 생성합니다. 예를 들어, SQLHELPER 메소드 MS MS는 응용 프로그램 블록에서 제공하는이 기술을 사용합니다.

주요 문제는 정적 변수입니다. 나는 정적 변수를 거의 사용하지 않고 필요하지 않았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top