2012-10-13 3 views
2

우리 모두는 MMO 게임의 인기있는 트렌드를 알고 있습니다. 선수들이 서로 마주 보게됩니다.게임 성능 향상 C#

  • 아래에 주어진 그러나 게임 플레이 중에 SQL 삽입 쿼리의 엄청난 흐름이 평균/최소 100 경기 대회는 게임 진행 중 테이블 12 분 500 플레이어/시간
  • 당 온라인있다,있다, 우리는 저장하는 48 개 기록
  • 이 될 수있는 각 플레이어는 4 플레이어의
    • 12 라운드 경기를 이동
    • 플러스 주문이나 특별한 아이템
    • 대회 당 96 48,000시간 당 레코드 삽입의 총 주위에 같은 수의 내 앞의 질문 (Improve MMO game performance)에 reponse에 (500 플레이어/시간)

, 내가 스키마를 변경하고 우리는 데이터베이스에 직접 작성되지 않습니다.

대신 DataTable에 모든 값을 누적하십시오. 그런 다음 DataTable에 100,000 개 이상의 행이있을 때마다 (때때로 한 시간 내에있을 수도 있음) csv 형식의 텍스트 파일에 씁니다. 폴더에서 CSV 파일을 자주 스캔하고 사용 가능한 CSV 파일을 읽고 서버 데이터베이스에 정보를 저장하는 또 다른 백그라운드 응용 프로그램입니다.

질문

  1. 우리가 직접 (가 데이터 테이블을 읽고 읽고 기록을 지 웁니다), 다른 응용 프로그램에서 게임 응용 프로그램에서 데이터 테이블 존재에 액세스 할 수 있습니다. 쓰기 및 디스크에서 읽기 대신에 우리는 메모리에서 직접 읽고 씁니다.

  2. 대용량 데이터를 저장할 수 있고 작업을 정렬 및 업데이트하는 데 훨씬 빠르며 DataTable이 더 빠릅니다. 사용자 ID를 자주 검색해야하기 때문에 게임 상태를 업데이트 할 수 있습니다 (거의 모든 삽입마다). 캐시 유틸리티이거나 빠른 검색/검색 알고리즘이거나 심지어 CollectionModel 일 수도 있습니다. 지금 우리는 foreach 루프를 사용하여 DataTable의 모든 레코드를 검색하고 사용자가있는 경우 행을 업데이트합니다. 그렇지 않다면 우리는 새로운 행을 만듭니다. SortedList과 클래스를 사용해 보았지만 노력이 두 배로 증가했을뿐만 아니라 메모리 사용량이 전반적인 게임 성능을 크게 떨어 뜨립니다.

감사

아빈

+1

A) http://stackoverflow.com/a/981824/284240 –

+1

당신이 strogly 형식화 된 데이터 집합 또는 기존의'데이터 집합/DataTable'를 사용하고 있습니까? ['PrimaryKey'] (http://msdn.microsoft.com/en-us/library/system.data.datatable.primarykey.aspx)를 설정 했습니까? 그런 다음 키를 통해 매우 효율적으로 행을 찾을 수 있습니다 (http://msdn.microsoft.com/en-us/library/y06xa2h1(v=80) .aspx). –

+0

그것은 종래의 모델입니다. 그래, 우리는 기본 키가 – arvind

답변

1

음, 대답하자

  1. 당신 할 수있는 응용 프로그램 사이주 객체, 원격을 사용 -하지만 훨씬 낮은 속도, 그리고 코드를 만드는 덜 읽을 수있는. 그러나 다른 해결책이 있으므로 계속 메모리로 작업 할 것입니다. 당신은 MemoryMappedFiles을 사용할 수 있습니다, 그래서 모든 작업은 메모리가 아닌 디스크를 사용하여 실제로있을 것입니다 : http://msdn.microsoft.com/en-us/library/dd997372.aspx

  2. 당신이 어떤 종류에서 NoSQL의 DB를 사용할 수 있습니다

    (이 거기 밖으로 많은 : 레디 스, MongoDB를, RavenDB) - 모든 키 - 값 액세스를 기반으로하며 성능을 테스트해야합니다.더 좋게도이 db 중 일부는 지속적이며 여러 서버와 함께 사용할 수 있습니다.

희망이 있습니다.

+0

나는 memorymappedfiles 찾고있어하지만 난 기회가 새로운 테스트 DB를 수 없습니다. – arvind

+0

지속성을 유지할 수있는 Redis와 같은 빠른 캐시 계층을 두 번째로 사용합니다. 이는 미래의 확장 성을 고려할 때이 유형의 시나리오에서 최상의 솔루션이되는 경향이 있습니다 – Milney

1

memcache에 당신의 성능을 증가시킬 사용