我們都知道的MMO遊戲的流行趨勢。球員彼此面對面生活。但是在遊戲過程中存在SQL插入和查詢的巨大流量,低於提高遊戲性能C#
- 給出每頁顯示12分鐘或500個播放器/小時
- 有平均/最低100場比賽在網上游戲進度表中,我們存儲每個玩家移動
- 12 4播放機的輪比賽可以有48條記錄
- 加上咒語或特殊項目
- 總共96個每錦標賽或48000每小時記錄插入件圍繞相同數量的(500名玩家/小時)
在效應初探我剛纔的問題(Improve MMO game performance),我改變了架構和我們沒有直接寫入到數據庫中。
而是積累在DataTable
所有值。然後,該過程每當DataTable
具有100K以上的行(其有時甚至可以在一小時內)寫入到CSV格式的文本文件。另一個經常掃描CSV文件的後臺應用程序讀取任何可用的CSV文件並將信息存儲到服務器數據庫中。
問題
我們可以訪問數據表存在於遊戲應用的從另一個應用程序,直接(它讀取數據表並清除已經閱讀記錄)。爲了代替從磁盤寫入和讀取,我們直接從內存讀取和寫入。
是否有更快的是數據表,可容納大量的數據,但在整理和更新操作相當快的任何方法。因爲我們必須頻繁地掃描用戶名,更新遊戲狀態(幾乎每個插入)。它可以是一個高速緩存工具或快速 掃描/搜索算法甚至CollectionModel。現在,我們使用foreach循環遍歷
DataTable
中的所有記錄,並在用戶存在時更新行。如果沒有,那麼我們創建一個新的行。我嘗試使用SortedList
和班級,但隨後它不僅加倍努力,內存使用率增加極大地減慢整體的遊戲性能。
感謝
阿文德
一)http://stackoverflow.com/a/981824/284240 –
是否使用了strogly類型化的DataSet或常規'的DataSet/DataTable'?你有沒有設置['PrimaryKey'](http://msdn.microsoft.com/en-us/library/system.data.datatable.primarykey.aspx)?然後,您可以非常有效地通過鍵找到行(http://msdn.microsoft.com/en-us/library/y06xa2h1(v = vs.80).aspx)。 –
這是一個傳統的模型。是的,我們有一個主鍵 – arvind