最近在Unity開發(fā)過程中出現(xiàn)一個很奇葩的問題,Unity在從編輯模式切換到運行模式時,Unity都會隨機性的假死(并不是每次運行都會卡死,而且一般打開Unity第一次運行都不會卡)。特么又沒有報錯,就直接這么的卡死了。。。死了。。。了。。。
懷疑以下幾點:
1、Unity版本升級的bug;測試方法:新建了一個空的場景來測試,測試的步驟就是狂點play按鈕,然后在Windowns的“資源監(jiān)視器”(打開任務管理器--》性能--》資源監(jiān)視器)看Unity的進程是不是無響應,然而空場景并不會卡死,所以應該是下面的問題。
2、代碼的bug;測試方法:由于沒有報錯,所以只能用了一個最不是辦法的辦法來debug -- 注釋代碼,從登錄場景的啟動代碼開始(因為我是在啟動登錄場景時才會有卡死的可能性),注釋掉一部分代碼,再狂點play按鈕,然后在Windowns的“資源監(jiān)視器”(打開任務管理器--》性能--》資源監(jiān)視器)看Unity的進程是不是無響應,經(jīng)過一天的努力(此處我應該在吐),終于在XML的反序列化代碼處找到了原因,只要我把一個for循環(huán)里的反序列化xml文件的代碼注釋掉,就怎么點都不會卡死了。
嘗試解決方法:
1、既然是xml反序列化卡死,那會不會是反序列化后的數(shù)據(jù)不對導致的,于是打斷點調試,發(fā)現(xiàn)反序列化出來的數(shù)據(jù)都是對的,那應該不是這個問題
2、是不是由于反序列化函數(shù)效率不高導致的(其實我的代碼中的這個反序列化函數(shù)是在一個for循環(huán)內的,而且這個for循環(huán)在一條協(xié)程里執(zhí)行的),所以我猜想要不對每個xml文件的反序列化都放在一條協(xié)程中,就是在for循環(huán)中一次循環(huán)開一個協(xié)程,這樣應該就不會卡了吧!然而實驗證明,沒什么卵用,而且貌似更加的容易出現(xiàn)卡死的現(xiàn)象
3、在打斷點調試的時候發(fā)現(xiàn)要反序列化的xml文件有51個,會不會是文件太多導致的,于是將目錄的文件移除到只剩一個,再測試,真的沒有出現(xiàn)卡死的現(xiàn)象了,接著再往目錄添加原來的文件,一個一個的添加測試,在加到50個文件的時候就開始出現(xiàn)卡死的現(xiàn)象了,這就肯定是跟文件個數(shù)有關了,但是不可能就51個xml文件就掛掉啊,這樣也太渣了吧。
4、有沒有可能是反序列化這里的代碼有問題,
好了,逼逼這么久,最后終于有答案了,在一個做工業(yè)上位機的大神的博客里看到了,反序列化xml文件,如果文件個數(shù)比較少,那不會出現(xiàn)問題,但是文件一多,它也不會馬上出現(xiàn)問題,而是在運行一段時間后才出現(xiàn)的。最后發(fā)現(xiàn)是微軟的bug,有木有,有木有。解決的方法就是將
中的FileMode.Open改成FileMode.Truncate,是的,就是這么簡單,最后就是這樣的