免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
反序列化多個XML文件后出現(xiàn)Unity卡死

最近在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、有沒有可能是反序列化這里的代碼有問題,

[csharp] view plain copy
  1. using (XmlReader xRead = new XmlTextReader(filename))   
  2.         {  
  3.             object obj = null;  
  4.   
  5.             if (xRead != null)  
  6.             {  
  7.                 XmlSerializer sl = new XmlSerializer(type);  
  8.                 try  
  9.                 {  
  10.                     obj = sl.Deserialize(xRead);  
  11.                     xRead.Close();  
  12.                       
  13.                 }  
  14.                 catch (Exception e)  
  15.                 {  
  16.                     Debuger.LogError(e.ToString());  
  17.                     xRead.Close();  
  18.                 }  
  19.             }  
  20.               
  21.             return obj;  
  22.         }  
這是項目中的代碼,我查了網(wǎng)上的代碼,多用的是Filestream而不用XmlTextReader,會不會是XmlTextReader這個類的問題,然后就改寫成
[csharp] view plain copy
  1. FileStream fs = null;  
  2.         object obj = null;  
  3.         try  
  4.         {  
  5.             fs = new FileStream(filename, FileMode.Open, FileAccess.Read);  
  6.             XmlSerializer sl = new XmlSerializer(type);  
  7.             obj = sl.Deserialize(fs);  
  8.   
  9.             fs.Close();  
  10.              
  11.         }  
  12.         catch  
  13.         {  
  14.             if (fs != null)  
  15.             {  
  16.                 fs.Close();  
  17.                 throw new Exception("Xml deserialization fall!");  
  18.             }  
  19.         }  
  20.         return obj;  
這樣之后,發(fā)現(xiàn)真的沒有什么卵用。。。。。。

好了,逼逼這么久,最后終于有答案了,在一個做工業(yè)上位機的大神的博客里看到了,反序列化xml文件,如果文件個數(shù)比較少,那不會出現(xiàn)問題,但是文件一多,它也不會馬上出現(xiàn)問題,而是在運行一段時間后才出現(xiàn)的。最后發(fā)現(xiàn)是微軟的bug,有木有,有木有。解決的方法就是將

[csharp] view plain copy
  1. fs = new FileStream(filename, FileMode.Open, FileAccess.Read);  

中的FileMode.Open改成FileMode.Truncate,是的,就是這么簡單,最后就是這樣的

[csharp] view plain copy
  1. FileStream fs = null;  
  2.         object obj = null;  
  3.         try  
  4.         {  
  5.             fs = new FileStream(filename, FileMode.Truncate, FileAccess.Read);  
  6.             XmlSerializer sl = new XmlSerializer(type);  
  7.             obj = sl.Deserialize(fs);  
  8.   
  9.             fs.Close();  
  10.              
  11.         }  
  12.         catch  
  13.         {  
  14.             if (fs != null)  
  15.             {  
  16.                 fs.Close();  
  17.                 throw new Exception("Xml deserialization fall!");  
  18.             }  
  19.         }  
兩天時間啊,找一個bug啊,不容易啊。。。。我要去廁所先哭一會兒

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
.net序列化及反序列化
C#Object與XML文件或二進制文件之間的轉化
.NET實體類序列化方法
為什么需要序列化,以及序列化的一些操作【收錄】
C# 序列化(Serialize)與反序列化(Deserialize)
字符串序列化時碰到的小問題
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服