Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity Firebase SDK SetRawJsonValue性能_C#_Firebase_Unity3d_Firebase Realtime Database - Fatal编程技术网

C# Unity Firebase SDK SetRawJsonValue性能

C# Unity Firebase SDK SetRawJsonValue性能,c#,firebase,unity3d,firebase-realtime-database,C#,Firebase,Unity3d,Firebase Realtime Database,我正试图解决我的Unity 2D游戏中的一个问题,在这个游戏中,我使用Firebase实时数据库来存储个人资料、命中率、未命中率、等级进展等数据 现在,我正在制作一个场景,在这个场景中,用户可以创建一个新的个人资料/新角色。我已经使用了以下代码: var db = FirebaseDatabase.DefaultInstance.RootReference; Profile profile = new Profile { userId = GameManager.Instance.Us

我正试图解决我的Unity 2D游戏中的一个问题,在这个游戏中,我使用Firebase实时数据库来存储个人资料、命中率、未命中率、等级进展等数据

现在,我正在制作一个场景,在这个场景中,用户可以创建一个新的个人资料/新角色。我已经使用了以下代码:

var db = FirebaseDatabase.DefaultInstance.RootReference;

Profile profile = new Profile {
    userId = GameManager.Instance.User.UserId,
    name = "Bo Mortensen",
    age = 34,
    gender = "M"
};

string json = JsonUtility.ToJson (profile);

// The Push() is almost instant
var profileKey = db.Child ("profiles").Push ().Key;

// However, this takes around 3 seconds to return, even when specifying 1 as it's priority..
db.Child("profiles").Child(profileKey).SetRawJsonValueAsync (json, 1).ContinueWith (t => {
    if(t.IsFaulted) {
        Debug.Log("Faulted..");
    }

    if(t.IsCanceled) {
        Debug.Log("Cancelled..");
    }

    if(t.IsCompleted) {
        SceneManager.LoadScene ("Main game scene");
    }
});
因此,为键创建实际的概要文件引用几乎是即时的,而SetRawJsonValueAsync非常慢。进行了一次测试,在加载下一个场景之前大约需要5秒钟

这对Firebase正常吗?我有一种感觉,我不应该等待任务返回任何东西,而只是让它在后台工作,而我加载下一个场景。这将非常快,但如果它被取消或出现故障呢?我无法控制

应该说,我在调试模式下运行Unity游戏,Firebase目前是开发的免费层。不确定性能是否会随着Firebase的付费级别而提高

非常感谢任何帮助/提示

提前谢谢。

这里是firebaser

将Firebase项目升级为付费计划不会有性能差异。所有项目都在相同的基础设施上运行

如果这是您第一次与数据库交互,那么在客户机和服务器之间建立web套接字连接将浪费大量时间。之后,性能主要取决于发送的数据量和可用带宽。这是两个最常见的原因,完全不受应用程序代码的控制

一种快速检查您是否在浪费时间设置初始连接的方法是运行代码,该代码在彼此之后写入几次。如果接下来的通话速度明显加快,则您需要支付建立初始连接的费用。您无法阻止这种成本,但您可以通过在应用生命周期的早期与数据库交互来隐藏它,例如,在启动时读取/写入虚拟值

我可以想象时间流逝的另一个主要地方是JSON的解析。但是你的对象结构看起来很小,所以这看起来不太可能


在任务完成之前进行转换通常是安全的。只有当数据被服务器端安全规则拒绝时,isCancelled才会为true。由于您同时控制代码和安全规则,这通常不会在生产中发生。但我不确定客户机何时会为IsFaulted返回true。这个调用在底层iOS和Android SDK中不存在,所以我不知道Unity客户端何时提出这个条件。

非常感谢您,弗兰克!非常非常有价值的信息就在那里。我尝试创建一个单独的方法来在数据库中创建虚拟数据,第一个方法很慢,正如您所提到的,但是在那之后,数据立即被存储!我想到的一件事是:这真的应该包含在SDK指南中:-老实说,我很快就要寻找Firebase的替代品,只是因为这个简单的误解。无论如何:再次非常感谢你。这救了我一天:-很高兴听到这是最初的连接。大多数使用Firebase的应用程序类型从启动时就开始使用它。因此,创建连接的成本隐藏在一般启动成本中,在这种情况下无法进一步隐藏。在您的系统中,似乎直到稍后才使用数据库,在这种情况下,有一些方法可以隐藏成本。但这确实是我们对文档的通用方法可能没有帮助的情况之一。