litjson调用ToObject和ToJson的时候,如果文件内容过大(MB级别),会阻塞主线程造成卡顿,可以使用多线程读取,然后Unity这边开协程等待,这样不会对主线程有影响。
private int _readJsonCount = 0;
IEnumerator InitAllMapInfo()
{
_readJsonCount++;
ParameterizedThreadStart threadStart = new ParameterizedThreadStart(ReadMapJson);
Thread thread = new Thread(threadStart);
thread.Start(m);
while (_readJsonCount > 0)
{
yield return null;
}
//读取完毕
}
private void ReadMapJson(object mapId)
{
try
{
int m = int.Parse(mapId.ToString());
string FullName = GetMapJsonPath(m);
_dictAllLands.Add(m, JsonMapper.ToObject(File.ReadAllText(FullName)));
_readJsonCount--;
}
catch (Exception e)
{
_exMsg = e.Message;
_readJsonCount--;
}
}
ParameterizedThreadStart 是可以传参数的Thread,如果不需要,可以用ThreadStart。
该博客介绍了如何解决litjson在处理大文件时导致的主线程阻塞问题,通过使用多线程读取文件内容,并结合Unity的协程机制,确保在不卡顿主线程的情况下完成JSON数据的转换。示例代码展示了如何实现这一优化方案。

1857

被折叠的 条评论
为什么被折叠?



