2012-06-12 6 views
1

오류가 없으므로이 질문을 할만한 곳이 아닌지 잘 모릅니다. 그렇지 않은 경우 올바른 포럼을 알려주십시오. 어떤 방법이든 ...성능이 매우 느린 구조

소셜 네트워크 프로젝트에서 일하고 있으며 실제로는 느리게 실행되며 일부 페이지는로드하는 데 5-15 초가 걸립니다. "캐시"구조가 있지만이 작업을 수행 한 사람은 이미 C# .net에서 Cache을 빌드하는 데 사용하지 않았으며 시스템의 캐시로 정적 인 List<object>을 만들었습니다. 심지어 tought 옳지 않다, 나는 그걸로 처리 할 수 ​​있습니다 ...

문제는, 모든 페이지 요청에,이 cache에서 사용자 데이터를로드해야하고, 사용자 구조가 매우 큽니다. 그래서 궁금 해서요. 매번 페이지가 요청 될 때마다 캐시에서 사용자 데이터를로드하는 대신, 사진, 이름, 닉네임, ID와 같은 모든 페이지에 필요한 가장 많이 사용되는 데이터가있는 세션을 만들어야합니다. 일반 사용자가 아닌 다른 유형의 데이터를로드합니다. 캐시에서 요청합니다. ...

이것이 올바른 대답인지 아닌지는 잘 모르겠지만 실제로는 묻습니다. 이 문제를 해결할 필요가있다. 그래서 여기 전문가들의 조언을 듣고 싶습니다.

+3

이 데이터를 모두 저장하는 데이터베이스가 있습니까? 그렇다면 괜찮은 데이터베이스 엔진이고 로컬 네트워크에 있으므로 데이터를 메모리에 캐시하는 것이 좋습니다. DB 엔진이 이미 자체적으로, 그리고 아마도 더 효율적으로 작업하고있을 때 직접 캐쉬 할 이유가 없습니다. –

+1

"정적 목록 에서 현재 사용자 개체를 선택하는 코드를 게시하십시오. – Paparazzi

+0

예 데이터베이스 MsSql 서버가 있습니다. 생각보다 빨리 서버 캐시에서 가져 오는 것이 databse가 아닌가요? 여기 그것의 화면입니다.현실이 나타나지 않았기 때문에 나는 왜 그런지 이해하지 못한다. [link] http://imageshack.us/photo/my-images/689/databasee.jpg/ – rpmlins

답변

3

성능 문제로 인해 항목을 캐시에서 검색해야 할 수 있습니다. 사전을 사용하면 키로 항목을 검색 할 수 있으므로 사전이 더 좋습니다. 이것은 네이티브 캐시 구조에보다 가까운 구현입니다.

세션은 웹 사이트의 확장성에 좋지 않습니다. 당신이이 기타 관련 질문을 참조하면

를 죽일 것이다 캐싱 세션을 사용하여, 페이스 북이나 뭐만큼 큰 것을 계획하는 경우 :

What is a good way to store large temporary "session" data in a web application

다른 괜찮은 질문을

Why is it a bad idea to use Session to store state in high traffic websites?

+0

글쎄 제이슨, 나는 세션에 큰 데이터를 저장할 계획이 없으며 모든 페이지의 사용자 아이디, 이름, 닉네임, 사진에 필요한 데이터 만 필요합니다. 캐시를 죽일 계획은 없지만 최소화하려고합니다. 사실 나는 페이지를로드 할 때마다 수천 개의 레코드가있는 목록을 읽어야 만 4 ~ 5 개를 얻을 수 있습니다 ...하지만 감사합니다. 링크를 poiting하면 도움이 될 것입니다. – rpmlins

+1

@rpmlins 잠깐. 수천 개의 레코드 목록으로 4 ~ 5 개만 얻을 수 있습니까? 여기에 사전이 정말로 필요합니다. 물론 더 나은 솔루션은 DB에서 직접로드하는 것입니다. * 테이블이 쿼리 매개 변수에 따라 인덱싱되면 즉각적입니다. – Martheen

+0

데이터베이스가 큰 경우에도? 수천만 건의 레코드를 매우 쉽고 빠르게 전달할 수 있습니다. – rpmlins

2

제이슨과 동의 +1

의견이 사용자로부터 열쇠 (ID)가 있습니다.

키가있는 경우 사전이 길어집니다. 또한 개체에 Int32로 표현할 수있는 자연 키가있는 경우 gethash 및 equals를 재정의합니다. 10,000에 대한 사전 조회는 밀리 초이어야합니다.

필요한 컬렉션 사운드를 제공합니다. 키순 콜렉션에서는 속성 (ID) 중 하나가 키입니다.
keyedcollection

정적 목록 인 경우 사전을 데이터베이스로 연결합니다. 당신은 하나의 핵심 사전을 가지고 있기 때문에 데이터베이스를 이길 것입니다. 복합 키이면 인덱스 된 조회를 위해 데이터베이스를 사용해야합니다.

+0

키가 Int32가 아니며 'uniqueidentifier'가 거기에 문제가 있습니까? – rpmlins

+1

사전 는 해당 시나리오에서 작동합니다. –

+1

전혀 문제가되지 않습니다. 그럼 당신은 그냥 gethash를 오버라이드하지 마십시오. Gethash는 비틀 거리며 중요하지 않았습니다. – Paparazzi