我正在使用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并让所有脚本访问它会更好吗?我目前的模型看起来最直观,但我需要更好的表现。
由于
答案 0 :(得分:0)
远程数据库增加了延迟。每个请求说100毫秒。
单个对象的选择效率低下,获取所有对象的列表,必要时连接表,仅读取一次数据,从而减少100 ms(加数据传输)的单个请求的延迟,而不是20次100毫秒。