2009-02-04 3 views
2

저는 현재 웹 서비스에서 사용할 API를 만들고 있습니다..Net 정적 메서드 및 동시성에 미치는 영향?

상당량의 정적 메소드을 사용하여 API를 구축하면 어떤 성능 문제가 발생할 수 있는지 궁금합니다.

원래 생각은 서비스로 작동하는 전문가 개체를 만드는 것이 었습니다.

단일 사용자 환경에서이 접근 방식은 훌륭했습니다! 하지만 곧이 기능을 다중/동시 사용자 환경으로 이식 할 필요가 있습니다.

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

안부,

편집 :

정적 방법가 정적 변수를 보유하지 않으며 부작용이 없습니다. 그들은 단순히 모든 것이 인스턴스화되는 일반적인 루틴을 실행합니다. (예 : vars 및 객체)

답변

9

동시성에 특별한 영향을 미치지 않습니다. 동일한 규칙이 사실입니다. 공유 데이터를 동시에 변경하는 것은 좋지 않습니다. 인스턴스 메소드가 있지만 아무 것도 변경하지 않으면 괜찮습니다.

정적 메서드는 거의 항상 스레드로부터 안전해야합니다 (예 : 은 스레드로부터 안전해야 함) 반면 인스턴스 메서드는 일반적으로 필요하지 않지만 (클래스의 스레드 안전성).

+0

나는 최근에 동일한 메소드에 대한 동시 호출의 경우 호출이 대기열에 있다고 말했습니다. –

+0

아뇨, 그건 틀렸어. 물론 잠금 장치가 없다면 말야. –

+0

아니, 아무도 도대체 왜 .. –

2

성능 문제 (크 누스)에 대해별로 염려하지 않으므로 멀티 스레드 환경에서 테스트 가능성 및 상태 관리 문제와 관련이 있습니다. 주로 코딩 및 유지 관리의 복잡성을 줄이기 위해 드래그 할 수 있습니다 가끔 성능 문제보다 나쁜 프로젝트.

정적을 모의 할 수 없으므로 정적 메서드를 기반으로하는 API를 사용하는 코드는 상대적으로 테스트 할 수 없습니다. 당신이 요구하는 것이 아니라, API를 사용할 사람들에 대해 생각해보십시오.

스레드간에 공유 데이터가 유지되는 지점을 절대적으로 줄여야합니다. 이렇게하면 스레딩 문제가 줄어 듭니다. 이 작업을 수행하는 데는 약간의 효율성이 떨어질 수 있지만 코딩 및 유지 관리가 쉽습니다. 모든 페이지가 정적 인 경우 ASP.NET 응용 프로그램을 작성하고 테스트하는 것이 얼마나 힘든지 상상해보십시오. 악몽 일거야. API가 시간이 지남에 따라 기능을 얻게되면 그 길을 따라갈 수 있습니다.

또한 적절한 DI 프레임 워크를 사용하십시오. (Unity는 P & P에서 나오는 가장 좋은 방법입니다).

2

정적 메서드에서 로컬 변수에 대해 걱정할 필요가 없습니다. 각 스레드는 자체적 인 스택을 가지고 있으며 메서드 호출마다 스택에 로컬 변수의 개별 사본이 만들어집니다. 예를 들어, SqlHelper 메서드 인 MS는 응용 프로그램 블록에이 기술을 사용합니다.

중요한 문제는 정적 변수입니다. 나는 거의 정적 변수를 사용하지 않는다. 나는 그럴 필요가 없다.

관련 문제