2009-07-28 4 views
0

저는 C# 게임 서버에서 엔티티 프레임 워크를 사용하여 쿼리하기가 쉬워졌습니다. 필자는 유형 안전성이 매우 중요합니다. Entity Framework는 상용구 코드 대부분을 자동화하는 데 큰 도움이됩니다. 비록 내가 어떤 구성 요소, 즉 ObjectContext을 활용하는 것에 대해 어떻게 확신 할지는 모르겠지만.엔티티 프레임 워크 (게임 서버 포함)

서버는 많은 스레딩을 사용하므로 스레드 안전이 중요합니다. 지금은 쿼리를 실행하기 위해 사용자 지정 풀만 사용합니다. 많은 세부 사항에 가지 않고, 각 쿼리의 방식으로 작동합니다

  1. 잡아 DbConnection
  2. 잡아 DbCommand
  3. DbCommand
  4. 을 실행 쿼리 클래스는 매개 변수를 설정하도록 허용 쿼리 클래스가 쿼리 결과를 처리 할 수 ​​있도록 허용
  5. DbCommand
  6. ,210
  7. 무료 DbConnection

그것은 매우 깨끗하고 빠르고, 안전하지만 문제가 쿼리를 작성하는 번거 로움의 비트인지, 그리고 내가 원한다면 수동으로 업데이트 "컨테이너 클래스"생성해야 타입 안전. 이것이 내가 Entity Framework를 사용하게 된 이유입니다.

DbConnectionDbCommand을 사용하면 위의 모든 작업이 효과적입니다. DbConnection/Command가 어떤 개체 나 다른 개체에 대한 쿼리를 수행하는지에 대한 우려가 없기 때문입니다.

어쨌든, 제한을 부과하지 않고 더 많은 것을 설명하는 방법을 모르겠습니다. DbConnection/Command를 사용하여 쿼리를 실행할 때마다 쿼리를 실행하는 것과 같은 작업을 수행하면 실제로 데이터베이스를 자주 업데이트 할 필요가 없을 때 ObjectContext를 삭제하면 너무 많은 오버 헤드가 추가됩니다.

데이터베이스에 대한 수요가 높지 않은 게임 서버에 Entity Framework를 즉시 사용하고 지속적으로 최신 상태로 유지하려면 어떻게해야합니까?

+0

정확한 질문은 무엇입니까? 데이터베이스가 DataContext보다 드물게 업데이트되면 큰 오버 헤드가 발생하지 않아야합니다. dbcommands와 dbconnections를 처리합니까? –

+0

혼란을 가져 주어서 죄송합니다. 데이터베이스는 자주 업데이트되지만 데이터는 매우 드물게 읽혀집니다. DbCommand/Connection에 관해서는, 아니, 나는 그것들을 처분하지 못했지만 처분 대신 풀을 사용하도록 다시 설계하기가 쉽기 때문이었습니다. ObjectContexts를 자주 작성/처분해도 상관 없습니다 (비용은 저렴하다고 가정).하지만 많은 캐싱 oppertunities를 무력화시키는 것처럼 보입니다. – Spodi

답변

1

Entity 프레임 워크의 성능 차이가 가장 큰 부분은 데이터 업데이트 (삽입되지 않음)입니다.이것은 데이터를 데이터베이스에서 먼저 읽은 다음 변경 한 다음 다시 데이터베이스에 저장해야하기 때문입니다.

개체 컨텍스트에 대해서는 using 문을 사용하므로 즉시 처리됩니다. 가비지 수집기가 범위를 벗어난 모든 객체를 처리하는 동안 게임이 일시 중지되는 것은 좋지 않습니다.

주로 읽은 경우, 예를 들어 Enterprise Library Caching 응용 프로그램 블록을 사용하여 데이터를 캐시하는 것이 좋습니다.

Entity Framework는보다 생산적인 프로그래밍 모델을 제공하지만 캐싱을 사용하면 성능이 향상됩니다.

2

먼저, 당신은 이것을 읽고, 내면화해야합니다 특정 노트의

Performance Considerations for Entity Framework Applications

:

  1. 올바르게 병합 옵션을 설정 다시 전용
  2. 주를 조회하는 사전 생성보기는 RelatedEnd.Load와 같은 항목에 대해서만 도움이되고 임의적 쿼리에 대해서는 도움이되지 않습니다. CompiledQuery를 사용하여 임시 쿼리를 최적화하십시오. 쿼리 준비는 복잡한 쿼리에 상당한 오버 헤드가 될 수 있으므로 가능하면이 작업을 수행하십시오.
  3. 미리보기를 생성하고 병합 옵션을 올바르게 설정하면 개체 컨텍스트를 인스턴스화하고 삭제하는 데 많은 오버 헤드가 발생하지 않습니다. 응용 프로그램에 적합한 방식으로 사용하십시오. 수명을 "조기에 최적화"하지 마십시오.
1

Subsonic을 확인하고 싶을 수도 있습니다. Subsonic을 확인해보십시오.이 기능은 골목길을 약간 넘기 때문에 EF처럼 현명하지 않으므로 단순성 때문에 일반적으로 약간 더 성능이 좋아야합니다. 동시에 객체 생성 각도를 매우 잘 포함하므로 많은 상용구를 작성할 필요가 없습니다.