2013-11-28 4 views
4

개선 될 수있는 작업 영역을 찾기 위해 최근에 매우 오래된 C# 코드 기반 (아주 오래된 .NET 1.1과 C# 1.2)에 액세스했습니다. . 활이 가장 강력한 무기였던 과거와 같은 창입니다. C# 2보다 적은 C# 버전을 기꺼이 코딩 할 기회가 없었습니다.초기 버전의 .NET에서 값 형식을 수행하고 형식에 안전한 컬렉션을 제공합니다.

기본적으로, 내가 발견 한 것은 숫자와 구조체를 저장하기위한 큰 ArrayList s의 전체 묶음입니다. 커다란 의미는 수십만 또는 수십만 가지의 가치를 의미합니다. 뭔가 같은 것

이러한 목록은 다른 위치의 다른 표준에 따라 정렬되거나 다시 검색됩니다.

사방

그래서 문제는,이 문제를 어떻게 해결하는 두 가지 문제에서 개체의 결과 ArrayList 작품은 내가

  • 어떤 유형의 안전
  • 권투와 언 박싱 함께했다 알면 제네릭의 도움없이? 너무 많은 데이터가 있기 때문에 un/boxing을 제거하기 위해이 구조체의 클래스를 만들지는 않을 것입니다.

    내 구조체 대신 사용할 수있는 사용자 지정 배열 목록을 만드는 방법에 대해 생각했습니다. 거기에있는 모든 구조체에 대해 사용자 지정 배열 목록 구현을 만들어야합니까? 그것에 대해, 그것은 내 자신의 IEnumerable, ICollection 및 IList 각각의 이러한 구조체를 정의하는 것을 의미 할 것입니다, 그렇죠?

    성능이 좋고 타입 안전성이 뛰어난 시스템을 얻으려면 비용을 지불하는 것이 좋을지 모르지만 시도하기 전에 자신의 의견을 알고 싶습니다.

+1

당신은 .net 1.1에 맞았습니까? 왜 atleaset .net2.0을 사용하지 않는지 프로젝트를 개선 할 계획입니까? –

+1

실제 질문이 "성능을 향상시키기 위해 내 ArrayList를 대체 할 수있는 것은 무엇입니까?"_ 대답은 "벤치마킹"_입니다. 당신은 대안에 대해 분명히 알고 있습니다 만, 그들 중 어떤 것이 아마 그 프로젝트에서 어떻게 사용되고 있는지에 달려 있습니다. – CodeCaster

+0

@SriramSakthivel 나도 그랬 으면 좋겠다. 고객에게 "안녕하세요, .NET 2.0을 서버에 설치하여 더 잘 작동하는지 확인하십시오."라고 말하지는 않습니다. 그들은 여기에있는 것을 원치 않습니다. –

답변

3

제네릭 없이는 값 유형이있는 권투를 피할 수없는 콜렉션을 만들 수 없습니다. 그러나 구체적인 값 유형에 대한 특수 컬렉션을 만들 수 있습니다.

여기에 아이디어가 있습니다 : ArrayList의 버전을 직접 작성하십시오. T4 템플릿을 사용하면 관심있는 구체적인 유형마다 특수 버전을 생성 할 수 있습니다. 코드 중복없이 ArrayListInt32, ArrayListSingle 등을 제공합니다.

이렇게하면 권투에서 성능 저하가 없어지고 유형 안전이 복원됩니다.

사실 자바는 유형 소거로 인해 제네릭을 사용하여 복싱을 피할 수 없기 때문에 비슷한 문제가 있습니다. 최신 버전에는 특수 배열 목록 클래스가 있습니다. C#은 최신 버전에서 진정한 제네릭을 구현합니다.

+1

전자 메일 본문을 구조화하기 위해 T4 템플릿을 사용했지만이 용도로 사용하지는 않았을 것입니다. 참으로 멋진 포인트! –