2016-06-21 1 views
-6

표준 웹 API 응용 프로그램이 있습니다. 의 액션에서이 같은 응답을 반환하고 싶다고 가정하자 : 나는 class 또는 struct로 지정할 수데이터 모델을 클라이언트 측에 전달하기 위해 클래스 또는 구조체가 더 나은 것은 무엇입니까?

public IHttpActionResult GetSomething() 
{ 
    var model = new Domain.OutcomingModels.Action[1]; 
    return Ok(model); 
} 

객체 model하십시오. 내 견해로는 성능과 관련하여 class보다 struct을 선호 할 이유가 없습니다.

이 앱은 수백만 건의 클라이언트 요청을 초당 처리합니다. 나는에 대해 걱정하는 것 :

  • 시간에 IHttpActionResult
  • 메모리 소비를 반환하는 방법으로 개체를 전달할 수 구조체를 통해 클래스 또는 구조체
  • 시간에
  • 메모리 소비를 클래스를 만들 수 있습니다 직렬화에 같은 방법으로 힙 조각 모음
  • 가능한 문제 w와
  • 가능한 문제를
  • 시간을 개체를 전달 일반 가비지 수집기

맞습니까?

질문은 클래스와 구조의 일반적인 차이점이 아닙니다. Ok 또는 BadRequest과 같은 메서드를 사용하여 C# 개체를 serialize 된 개체로 변환합니다. 가능한주의 사항에 대해 묻고 있습니다.

+4

MSDN에는 그 중 하나를 선택하는 페이지가 있습니다. https://msdn.microsoft.com/en-us/library/ms229017(v=vs.110).aspx – juharr

+0

[Structs versus classes] (http : @sthoveroverflow.com/questions/3942721/structs-versus-classes) – HimBromBeere

+0

@juharr, 나는 클래스와 구조체의 차이점을 안다. 문제는 일반적으로 그것에 관한 것이 아니라 특정한 경우에 발생할 수있는주의 사항에 관한 것이다. 숨겨진 물건이 없다면, 당신의 답변에 그것을 적으십시오. – cassandrad

답변

8

모델이 JSON 또는 XML로 변환되어 클라이언트로 반환됩니다.

는 JSON이나 XML 어느 클래스와 구조체를 구분, 그래서 당신은 class 또는 struct을 선택 여부는 관점에서 중요하지 않습니다. 의미있는 성능 차이도 없을 것입니다.

struct를 사용하여 시스템의 다른 부분에서 혜택을 수 있지만 직렬화 그들 중 하나가 아닙니다 수 있습니다.

으로 변경해야하는 이유가있을 때까지 class으로 고정하십시오. 그런 다음 변경 가능한 struct에 대한 염려를 제거하고 참조/복사, 값 대 참조 동등 등을 전달합니다.

+0

JSON 또는 XML이 무엇이 더 나은지 묻지 않습니다. – cassandrad

+1

내가 말하는 것이 옳다면 @ 카산드라드 : @Standley가 실제 * 선택 사항 * 형식을 암시하지 않는다고 생각합니다. 답변은 꽤 정확하게 당신의 영업 시간에이 비트가 일종의 관련이 없다는 것을 지적합니다. 그것은 당신이 말했듯이,'class'와'struct'를 사용하는 것에 대한 좋은 지침을 제공합니다. : –

+2

@cassandrad 나는 어떤 것이 더 나은지 - JSON이나 XML에 대답하지 않았습니다. 당신은'class' 또는'struct'가 더 좋은지 물었고, 직렬화 관점에서는 중요하지 않습니다. –

0

performace-impacts 만 고려할 때이 단어의 의미를 정의해야합니다. 예를 들어 메모리 사용, 속도, 주어진 작업을 처리하는 데 필요한 사용자 작업의 수와 같이 응용 프로그램이 어떻게 실행되는지를 결정하는 많은 지표가 있습니다.

속도에 미치는 영향은 그다지 크지 않기 때문에 무의미합니다. 또한 메모리 풋 프린트의 차이는 모호합니다. struct의 단일 인스턴스는 메모리가 더 적게 필요하지만 구조체는 값 유형이므로 어떤 멤버에게 넘겨 줄 수도 복사본 인스턴스 전체가됩니다.

D 스탠리가 이미 언급했듯이, 당신은 다른 것을 선택해야 할 진짜 이유가있을 때까지 분명히 수업을 사용해야합니다. 그러나 성과는 아무 좋은 이유이기 위하여 ment이다.

편집 : JSON에 대해서도 언급했습니다. 직렬화를 위해 구조체를 사용하는 것은 boxing과 unboxing이 객체를 읽고 쓰는 데 필요하다는 점에 대해 더 많은주의가 필요하다고 생각합니다.

+0

실제로 가능한 모든 종류의 성능 영향을 설명하는 대답을 기대했습니다. 내 앱은 초당 수백만의 클라이언트와 같이 엄청난 부하가 발생합니다. 메모리 소비, 객체 생성 및 직렬화 시간을 고려해야합니다. – cassandrad

+1

꽤 광범위하고 많은 다른 측면을 다루기 때문에 *이 질문에 대한 * 답은 없습니다. 이미 언급했듯이 * performace *가 의미하는 바를 빠뜨린다. – HimBromBeere

+1

@HimBromBeere 질문이 너무 광범위하여 합리적으로 대답 할 수 없다고 생각할 때 질문에 대답하지 않는 대답을 게시하는 대신 너무 광범위하게 투표를 종료해야합니다. – Servy

관련 문제