我们如何使用统一在后台保存大量数据?

时间:2018-04-23 07:17:24

标签: c# database sqlite unity3d

我想在后台保存本地数据库中的大量数据,但是当我尝试保存数据时,我的Unity IDE会挂起2-3分钟。 2-3分钟后它完美运作。任何人都可以建议我怎么做.Below是我的示例代码

private IEnumerator WaitAndPrint(TestController.TestReportModel report)
{
    dbHelper.deleteAllFromTable(dbHelper.TABLE_OFFLINE_MASTER_TEST_REPORT);
    dbHelper.deleteAllFromTable(dbHelper.TABLE_MASTER_OFFLINE_POINT_DATA);
    for (int i = 0; i < report.data.Count; i++)
    {
        TestController.TestData MasterData = report.data[i];
        dbHelper.AddOfflineMasterTestReport(MasterData, "");
    }                
    yield return new WaitForSeconds(1);   
}

1 个答案:

答案 0 :(得分:1)

Coroutine不是一个主题。如果保存操作需要花费很长时间才能完成,请创建一个新线程并在那里执行。有关示例,请参阅下面的功能。该代码已移至新的Thread中。

void WaitAndPrint(TestController.TestReportModel report)
{
    //Create Thread
    Thread thread = new Thread(delegate ()
    {
        dbHelper.deleteAllFromTable(dbHelper.TABLE_OFFLINE_MASTER_TEST_REPORT);
        dbHelper.deleteAllFromTable(dbHelper.TABLE_MASTER_OFFLINE_POINT_DATA);

        for (int i = 0; i < report.data.Count; i++)
        {
            TestController.TestData MasterData = report.data[i];
            dbHelper.AddOfflineMasterTestReport(MasterData, "");
        }
    });
    //Start the Thread and execute the code inside it
    thread.Start();
}

您现在可以直接调用您的函数,它不应该冻结Unity:WaitAndPrint(report);

如果您想使用新Threa中的Unity API,请使用UnityThread.executeInUpdate。有关完整示例,请参阅this