数据库连接/查询与统一游戏对象相关联

时间:2014-07-08 17:02:00

标签: c# database unity3d

我正在使用Unity中的一个应用程序,该应用程序需要访问数据库以提供有关一定数量GameObject的信息。

目前,我已经为每个构建连接,查询数据库并填充一些公共变量的GameObject附加了一个脚本,如下所示:

public class Fill : MonoBehaviour {
    static string connectString = 
    "Server=blah;" +
        "Database=blah.org,3500;" +
        "User ID=blahman;" +
        "Password=blah42;";

    static SqlConnection cn = new SqlConnection(connectString);
    public string PublicVar;
    void Start () {
        string sCommand = string.Concat("SELECT blah from blah.table where row =", transform.GameObject.name);

        //FILL PUBLIC VARIABLE FOR _______
        SqlDataAdapter da = new SqlDataAdapter(sCommand, cn);
        cn.Open ();
        DataTable dataTable = new DataTable();
        int rec = da.Fill (dataTable);
        foreach (DataRow row in dataTable.Rows) {
            //Debug.Log ("--- Row --- ");
            foreach (var item in row.ItemArray){
                //Debug.Log ("Item ");
                //Debug.Log (item);
               PublicVar = item.ToString();
            }
        }
        cn.Close();

    } 


    } 

我在开始运行场景时目前正经历一些相当大的时间开销,显然是因为数据库正在连接并在“开始”方法中查询到许多不同的游戏对象(> 20)。

我的问题是:这个开销来自哪里?是在查询本身,连接,数据适配器?建立一个全局连接或Singleton并让所有脚本访问它会更好吗?我目前的模型看起来最直观,但我需要更好的表现。

由于

1 个答案:

答案 0 :(得分:0)

远程数据库增加了延迟。每个请求说100毫秒。

单个对象的选择效率低下,获取所有对象的列表,必要时连接表,仅读取一次数据,从而减少100 ms(加数据传输)的单个请求的延迟,而不是20次100毫秒。