私はC#ゲームサーバーでEntity Frameworkを使用してクエリを容易にする方法を検討してきました。私はタイプセーフティの大きなファンです。そして、Entity Frameworkは定型コードのほとんどを自動化するのに素晴らしい仕事をしています。私はいくつかのコンポーネント、すなわちObjectContext
を利用する方法についてはあまりよく分かりませんが、エンティティフレームワークとゲームサーバー
サーバーではかなりのスレッドが使用されるため、スレッドの安全性が懸念されます。今私は、クエリを実行するためのカスタムプールを使用しています。多くの詳細に入るがなければ、各クエリはの方法で動作:
- グラブ
DbConnection
- グラブ
DbCommand
DbCommand
- を実行し、クエリクラスはパラメータを設定することを許可
DbCommand
がある場合は、クエリクラスがクエリ結果を処理できるようにします。
- 無料
DbConnection
それは非常に、きれいに高速、かつ安全であるが、問題は、クエリを作成する手間のビットであるということである、と私は私がしたい場合は、手動で生成し、アップデート「コンテナクラス」しなければなりません型の安全性。これが私がEntity Frameworkに目を向ける理由です。
とDbCommand
だけを使用すると、これらのすべてがうまくいくのですが、DbConnection
/Commandがどのオブジェクトまたは何かに対してクエリを実行するかについて心配はありません。
とにかく、制限を課すことなくそれをもっと説明する方法はわかりません。 DbConnection
/Commandを使用するたびにクエリを実行したり、保存したり、ObjectContextを破棄したりするたびにクエリを実行するような作業を行うと、データベースを頻繁に更新する必要がないときにオーバーヘッドが増えます。
データベースに対する需要の高いゲームサーバーに対してEntity Frameworkをすぐに最新の状態にするにはどうしたらよいですか?
正確にあなたの質問は何ですか?データベースが頻繁に更新されず、DataContextが巨大なオーバーヘッドを引き起こしてはならない場合。あなたはあなたのdbcommandsとdbconnectionsを処分しますか? –
混乱して申し訳ありません。データベースは頻繁に更新されますが、データは非常に頻繁に読み取られません。 DbCommand/Connectionについては、それを処分したことはありませんでしたが、処分する代わりにプールを使用するように再設計するのは簡単だったからです。私はObjectContextを頻繁に作成/廃棄しても問題ありませんが(コストは安いと仮定していると仮定していますが)、多くのキャッシングoppertunitiesを倒すようです。 – Spodi