Ohoh .... 너무 많은 나쁜 습관.
제 2 부 : 안 먼 과거 최적화, ADO.Net 일, 나는, 저장 프로 시저 쓰기 DataReader를 통해 실행하고 DataReader를 통해 루프의 많은 개체를 채우는 데 사용 내 모델 클래스를 DataGrid에 바인딩하기위한 컬렉션 컬렉션을 전달하십시오. LINQ 일 동안 나는 멀리 같은 개체의 컬렉션을 만드는 것과 같습니다. . 하지만 직접 LINQ 문을 실행합니다. 내가 저장 프로 시저를 SQL 나에게 빠른 성능을 을 줄 것이다 추측 할 수 있지만,
기본적으로 과거에 당신은 약간의 dlusions했다. 저장 프로 시저에는 10 년 이상 동안 성능상의 이점이 없습니다 (!). 문서에서 명확하게 설명되어 있습니다. SQL 실행은 저장 프로 시저가 아닌 경우만큼 빠르며 쿼리 계획은 캐시되고 두 가지 모두에 대해 다시 사용됩니다.
SP는 왕복을 피하는 경우 (예 : 클라이언트에서 서버로 여러 요청 일괄 전송)의 경우에만 유용합니다 (예 : 절약 시간). 그리고 저축은 그들이 storped 절차라는 사실에 기인 한 것이 아니라 왕복 비용이 소요되는 시간 때문입니다.
슬프게도, 많은 프로그래머들이 망상을 가지고 있습니다. 왜냐하면 10 년 전 스토어드 프로 시저가 본질적인 이점을 가지고 있었을 때 전에는 다른 사람들로부터 얻었 기 때문입니다. 이제 이것이 SQL Server 6.5 시간입니다. 7.0 이후로 이것은 역사입니다.
http://weblogs.asp.net/fbouma/archive/2003/11/18/38178.aspx
은 기본적으로 당신은 손실 개발 시간과 mostlikely 측정 가능한 장점 ....에 대한 쓸모없는 코드를 많이 처리 하였다.
제 1 부 : 연결이 & 최적화를 풀링 : 내가 LINQ는 데이터베이스에 하나의 연결을 설정 있는지, 또한 연결 풀링을 따라 수있는 방법을 알고 싶어요.
너는하지 마라. 기본적으로 당신에게 좋은 것보다 더 똑똑해 지려고 노력하지 마십시오. 다중 연결에 문제가 있습니까?
풀링의 경우, (SQL Server)는 연결 문자열에 아무 것도 넣지 않아도됩니다. 그리고 예, LINQ는 마술처럼 연결 문자열에 정의 된 연결 풀을 무시하지 않습니다. LINQ는 데이타베이스와는 절대 대화를하지 않습니다. ADO.NET을 사용하기 때문에 ADO.NET은 마술처럼 행동을 바꾸지 않았습니다. 상위 ORM이 그것을 대신 사용하기 때문입니다. 연결 문자열에 풀링 항목이 있으면 ADO.NET은 여전히 해당 항목을보고이를 따르게됩니다.
이제 서버 풀에서 단 하나의 데이터베이스 연결을 갖는 것이 STUPID입니다. ou를 한 번에 하나의 트랜잭션으로 제한하고로드가 높아지면 성능을 완전히 파기합니다 (예 : 여러 요청을 동시에 처리해야 함). 나는이 부분 관련 데이터를 처리 곳
나는 내 코드 블록을 "사용" 에서의 DataContext 개체를 사용합니다. 이 LINQ가 복수 연결 을 사용하는 이유는 무엇입니까? DataContext를 클래스 수준 변수로 사용하면 은 단 하나의 연결 만 보장합니까?
Ah -에 달려 있습니다. 그것은 의미가있을 수 있습니다, 그렇지 않을 수도 있습니다. 알다시피, 문제가 있다고 생각하기 전에, 특히 여기에 제공 한 많은 양의 정보 (예 : 없음)를 감안할 때, 유일한 현명한 일을하십시오. 프로파일 러를 가져 와서 가지고 있는지 여부를 측정하십시오. Openng/연결을 100 번 또는 1000 번 닫으면 Profiler에 나타나지 않습니다. 문제는 해결할 필요가 없습니다.
말하자면, 나는 메서드 연결 연결을 좋아하지 않습니다. 일반적으로 나쁜 클래스 디자인을 보여줍니다. 연결은 작업 단위 내에서 재사용되어야합니다.
실제 성능 문제는 무엇입니까? – Phill
데이터 액세스 속도가 느리기 때문에 전반적인 성능이 느립니다. –
그래서 문제는 ORM 또는 연결 풀링이 아니라 데이터베이스 자체입니다. – Phill