문제

최근 대화 동료들과 함께 생산 다양한 관점에서 이 문제입니다.무엇을 말하는,그래서 당신 회원입니까?

나는 알고,심지어는 개념의 확장성을 취할 수 있도록 다양한 방법으로 그 상황이지만,그의 토론할 때까지 왔다.모두 보였 다른 무엇에 걸릴 확장성은 정말 의미합니다.저는 호기심을 보이 다양한 소뿐만 아니라 여기에 있습니다.사실,저는 게시 질문 는 개념입니다.

도움이 되었습니까?

해결책

확인하는 가장 좋은 방법은 벤치 마크를 작성하는 것이지만, 제 생각에는 LINQ가 유사한 코드를 손으로 쓰는 것이 그렇지 않은 최적화 가능성이 있습니다. 아직 그것들을 얼마나 잘 활용하는지 모르겠습니다.

LINQ를 사용하면 생성하는 방법이 아니라 원하는 것을 표현할 수 있습니다. 명백한 장점 중 하나는 LINQ가 자동으로 병렬화 가능하다는 것입니다 ( Plinq).

LINQ의 또 다른 장점은 게으른 것이므로 필요에 따라 컬렉션에서 도출하여 계산을 수행 할 수 있다는 것입니다. 당신은 동등한 것을 직접 코딩 할 수 있지만 LINQ에서 바로 얻는 것이 훨씬 쉬울 수 있습니다.

다른 팁

우리가 한 테스트에서 Linq to Objects (foreach)는 약 2 배 느려서 Foreach 루프였습니다.

LINQ에서 SQL (MS SQL 데이터베이스)이 거의 10x Data Reader를 사용하여 직접 쿼리보다 느리게, 대부분의 시간을 사용하여 Expression Tree에서 SQL을 생성합니다 (따라서 CPU 바운드 및 데이터베이스가 공전 할 것입니다)이이를 피하려면 컴파일 된 쿼리를 사용해야합니다.

이것 좀 봐 이상. 게시물의 대부분의 정보는 여전히 .NET 3.5 SP1에서 유효합니다.

이 질문은 다음과 같이"묻는 방법을 확장 컬렉션?"

자에 대해 이야기 LINQ 을 개체입니다.일반적으로 말하는 한도 내에서 대부분의 구현 IEnumerable<T> 를 통해 반복하는 모든 항목에서 근본적인 컬렉션,LINQ 에는 중대한 잠재력을 가늠하게 됩니다.성 List<Foo> 을 포함하는 천만 항목과 같은 것이:

var list = from Foo f in fooList
           where f.Value = "Bar"
           select f;

은 속도가 느려질 수 있습니다.그렇지 않습 LINQ 의 잘못이 아닙니다.당신이하는 하나 그것을 목록 천만의 항목입니다.

이것을 다루는 것과 동일한 방식으로 그것을 다루는 경우 LINQ 존재하지 않았다:을 구축하여 사전 SortedLists 과 같은 도움 당신은 깎 검색 공간입니다.

할 수 있습 LINQ 향상 확장성(물론,확장성을 쉽게 얻을 수)를 통해 연기 쿼리를 실행합니다.대체할 수 있습니다 순진한 방법을 만들어 목록,필터를 새로운 목록,필터는 새로운 목록,등등.와의 시리즈 LINQ 쿼리:

var list1 = from Foo f in fooList where f.Value1 = "Bar" select f;
var list2 = from Foo f in list1 where f.Value2 = "Baz" select f;
var list3 = from Foo f in list2 where f.Value3 = "Bat" select f;

의 모든 실행되는 하나를 통해 전달을 통해 기본 컬렉션을 할 때(그리고 해당되는 경우)그것이 필요한 반복 작업에 최종 목록입니다.다만,이것은 새로운 기능:가지고 있지 않은 경우 LINQ,당신은 아마를 교체하는 순진한 방법으로 하나는 동일한 것입니다.하지만 LINQ 것이 조금 더 쉽습니다.

제 생각에는 LINQ는 확장 성을 다루지 않고 개발 지점에서 물건을 단순화하기위한 것입니다.

사실, LINQ를 사용하는 것은 커버 아래에 많은 합병증을 숨겨서 쉬운 일을합니다. ~할 수 있었다 사용될 때 리드 무책임하게, 확장 성 문제에.

예제는 다른 답변에는 많지만 가장 중요한 것은 다음과 같습니다.

  • 객체 컬렉션을 쿼리하는 경우 크기를 무시할 수 없습니다. 아마도 LINQ에서 모델에서 그것을하는 것은 쿼리에 몇 가지 객체가있을 때 좋았을 것입니다 ... 크기가 커지면 모델이 아닌 데이터베이스에서 쿼리가 발생해야한다는 것이 분명해집니다.

  • 내가 아는 한 LINQ로 SQL을 자동 생성하는 경우 쿼리를 컴파일하는 방법에 대한 데이터베이스 힌트를 줄 수 없습니다. WITH (NOLOCK). 테이블 크기가 커지면 이러한 문제를 해결할 수있는 것이 필수적입니다.

  • 위와 유사하지만 더 일반적인 것 : DB에 대한 확장 성 문제를 해결할 때 해야합니다 DB가하는 일을 제어하십시오. SQL에 컴파일하는 언어를 사용하면 다시 실행 계획에 컴파일되면 손에서 제어가 제거됩니다.

  • 데이터베이스 스키마를보다 확장 가능하게 만들기 위해 데이터베이스 스키마를 변경 해야하는 경우 어떻게됩니까?

  • 간단 해 보이지만 많은 고통없이 LINQ 제공 업체를 변경할 수는 없습니다. SQL Server 쿼리는 쿼리 객체 또는 XML 쿼리와 같지 않습니다. LINQ는 매우 유사합니다. 주니어 개발자 중 일부는 확장 성을 염두에 두는 방법을 배우는 것보다 쉽기 때문에 "LINQ Spree"를 기대합니다.

결론적으로, 나는 LINQ와 함께 확장 가능한 코드를 작성할 수 있다고 생각하지만, 좋은주의를 기울여 사용 함으로써만 가능하다고 생각합니다. 살인자가 없습니다 도구, 만 살인자 암호.

사용중인 LINQ 제공 업체와 사용 방법에 따라 크게 달라집니다. LINQ는 아마도 놀라운 실행 속도를 알지 못하지만 개발자에게 생산성이 상당히 향상됩니다.

에 따르면 이것 일부 CTPS LINQ에서 SQL에 대한 링크는 일부 경우 직접 SQL을 사용하는 것보다 이미 낫습니다.

속도에 관심이 있고 LINQ를 사용하여 개체를 많이 사용하는 경우 여기 1000 배의 성능 향상을 제공 할 수있는 공급 업체를위한 Codeplex 프로젝트입니다.

어떤면에서 확장성에 대한 질문은 LINQ를 사용하는 것에 달려 있습니다. 비즈니스 애플리케이션에서는 많은 SQL 명령이 실행되고 있습니다. 속도가 느리고 DBMS에서 컴파일해야합니다. 대신 볼 수있는 것은 많은 저장 프로 시저 호출입니다. LINQ에서는 약간 더 빠릅니다.

LINQ에서 SQL 등은 ADO.NET 위에 구축되어 있습니다. 그들은 완전히 다른 방법론 등이 아닙니다. 물론 LINQ에서 XML은 덮개 아래에 다른 API를 사용합니다. 이것은 컴파일러와 매우 흡사 할 것입니다. 인간이 더 빨리 만들 수있는 최적화가 항상 있지만, 대부분의 경우 이러한 API는 자신이 작성하는 코드보다 더 빠르고 덜 버그가 많은 코드를 생성 할 수 있습니다.

스케일링 측면에서 데이터를 약간 배포하려면 LINQ를 웹 서비스에 배치하거나 SQL Server 복제를 사용할 수 있습니다. ado.net보다 덜 확장되지 않아야합니다.

확장 성과 성능은 두 가지 다르지만 관련된 것입니다. 성능을 측정하려면 하나의 상자로 지원할 수있는 사용자 수를 확인해야합니다. 확장 성을 측정 할 때 다른 상자를 추가하고 원래 양의 두 배를 지원할 수 있는지 확인하십시오. 아마도 처리 능력에 75% 만 추가 할 수 있습니다. 다음은 원래 장치의 50% 만 추가하므로 꽤 빨리 내려갑니다. 그 속도로 몇 개의 상자를 추가하더라도 지원되는 사용자 수를 두 배로 늘리는 것이 운이 좋습니다. 그것은 확장 성입니다.

LINQ 모듈 스케일이 데이터베이스에 더 의존하는 방법, 기계의 강력, 데이터베이스의 설계, 응용 프로그램의 설계는 무엇입니까?

당신은 종종 결정적인 것을 드러내야하는 마이크로 벤치 마크를 볼 수 있지만, 전체 문제에 대한 열쇠 구멍보기이기 때문에 결코하지 않습니다.

좋은 오래된 20/80 예를 여기에서 가져올 수 있습니다. 도구의 20%, 응용 프로그램을 구성하는 모든 종류의 유형에 대해서는 80% 일 것입니다.

실제 예제를 찾고 있다면 StackoverFlow는 LINQ를 많이 사용합니다. 포스트/팟 캐스트.

가 가격에 대한 캐싱을 로드하는 개체에서의 수요를 사용하 Linq to SQL framework.는 경우 객체를 할 수 있으로드 부품 자체의 수요에,그것은 매우 가능성이 있는 것에 대한 참조 데이터의 컨텍스트 내에서 각 개체입니다.덧붙여하는 데이터의 컨텍스트에도 캐시 모든 개체제에서 요청한다.는 것을 의미를 유지하는 경우 하나의 객체의 주위(에서 하나 캐시거나기 때문에 당신이 그것을 사용하는 이상),당신은뿐만 아니라 잡고당 개체지만,모든 개체가 이제까지 요청에 의해 데이터의 컨텍스트입니다.이는 결코 얻을 쓰레기 수집하기 때문에 그들은 아직도 참조됩니다.

이 문제가 아니면 모든 당신의 목적 짧은 수명,응용 프로그램을 새로 생성 DataContexts 마다가 새로운 작품이다.하지만 내가 볼 수 있는 방법을 만들 수 있 확장 문제,사람의 추가 업무에 지장을 초래하는 승마와 함께 각 개체입니다.

LINQ는 여러면에서 Scalabile입니다.

한 가지 측면은 LINQ 뒤의 사양 구현으로, 표현식이 프로세스가 부족하여 다른 언어 (Linq2SQL, Linq2Hibernate) 또는 해당 물질에 대한 맵-유도 클러스터와 같은 분산 컴퓨팅 활주로에서 해석 될 수 있습니다.Dryadlinq)

또 다른 측면은 LINQ가 언어에 제공하는 의미론입니다. 제공자가 지연된 로딩을 지원하거나 쿼리 (PLINQ 또는 I4O)를 파라 렐라 화 또는 최적화 할 수있는 경우 메모리에 컬렉션을 채우지 않고 수십억 개의 객체를 반복 할 수 있습니다.

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