九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Lock不住的BUG,神一般無解的BUG(XX正由另一進(jìn)程使用,因此該進(jìn)程無法訪問該文件)

對于運(yùn)行中的 秋色園 站點(diǎn),偶爾的不經(jīng)常,我都會(huì)做以下的幾件開發(fā)者該常做的事:

1:查看網(wǎng)站的事件日志(看看有沒有網(wǎng)站未發(fā)現(xiàn)的異常,有的話要處理)。
2:查看被捕獲的異常日志(看看都是什么情況引發(fā)的,有的話要處理)。
3:查看數(shù)據(jù)庫執(zhí)行語句異常日志(看看都有啥情況)。 


今天早些時(shí)候,看了下日志,對于一條比較熟悉,但一直沒怎么處理的日志,突然有了想處理掉它的想法:

log:http://www.cyqdata.com/search/cnblogs/finger+print
------------------------
Error On : 2013-3-28 5:30:18
[WriteException]:文件“D:\*\TableSchema\CYQ.Data.TableSchema_Sql.qblog.Blog_User.ts”正由另一進(jìn)程使用,因此該進(jìn)程無法訪問該文件。:
   在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   在 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
   在 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
   在 System.IO.StreamWriter.CreateFile(String path, Boolean append)
   在 System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize)
   在 System.IO.StreamWriter..ctor(String path, Boolean append)
   在 CYQ.Data.Tool.IOHelper.Save(String fileName, String text, Boolean isAppend)
   在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   在 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
   在 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
   在 System.IO.StreamWriter.CreateFile(String path, Boolean append)
   在 System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize)
   在 System.IO.StreamWriter..ctor(String path, Boolean append)
   在 CYQ.Data.Tool.IOHelper.Save(String fileName, String text, Boolean isAppend)

 

關(guān)于這個(gè)錯(cuò)誤的小小解釋:

這個(gè)錯(cuò)誤,其實(shí)就是對IO寫文件操作加了try catch,然后記錄了下來,根據(jù)錯(cuò)誤的直觀提示:
既然是進(jìn)程性錯(cuò)誤,理想當(dāng)然的推想是應(yīng)用程序池在回收時(shí),產(chǎn)生的另一個(gè)進(jìn)程,剛好寫文件時(shí)和另一個(gè)未回收完成的進(jìn)程同時(shí)寫引發(fā)的異常,被記錄了。


我就想了一個(gè),通過增加進(jìn)程間的互斥量,來解決多進(jìn)程間并發(fā)解決方案:

        static System.Threading.Semaphore _mutex = new System.Threading.Semaphore(11"IOHelper.Save");
        private static bool Save(string fileName, string text, bool isAppend)
        {
            try
            {
                if (_mutex.WaitOne(2000false))//進(jìn)程間同步。
                {
                    using (StreamWriter writer = new StreamWriter(fileName, isAppend))
                    {
                        writer.Write(text);
                    }
                }
                return true;
            }
            catch (Exception err)
            {
                Log.WriteLogToTxt(err);
            }
            finally
            {
                try
                {
                    _mutex.Release();
                }
                catch
                {

                }
            }
            return false;
        }


寫完代碼,我建了個(gè)項(xiàng)目,寫個(gè)Demo,測試下多進(jìn)程的并發(fā)問題,代碼很簡單,一個(gè)按鈕點(diǎn)擊,開一個(gè)線程,運(yùn)行以下這段代碼:

 string path = AppDomain.CurrentDomain.BaseDirectory + "a.ts";
                while (true)
                {
                    IOHelper.Save(path, "test"true);
                }

 

線程一開,一個(gè)死循環(huán),不停寫文件。

運(yùn)行了一下,我查看文件是否正常創(chuàng)建,于是我打開那文件,看日志寫進(jìn)了沒有,發(fā)現(xiàn)很正常寫進(jìn)了,于是又回到代碼處。

然后又開了一個(gè)軟件,又點(diǎn)了運(yùn)行,一個(gè)神奇的BUG就這樣被我觸發(fā)了:

刷的一下,拋出異常:

"文件“F:\\*\\bin\\Debug\\a.ts”正由另一進(jìn)程使用,因此該進(jìn)程無法訪問該文件。"

 

神奇的BUG的被觸發(fā)后,神一般的無解:

1:不管我怎么寫代碼,僅單線程,Lock,雙重Lock,還是Mutex,還是混合用,運(yùn)行幾秒后,都拋這個(gè)異常。
2:然后我加了線程休眠,發(fā)現(xiàn)加到Thread.Slee(100)以下又正常,這個(gè)正常讓我懷疑,難道文件關(guān)閉,還有延時(shí)功能?
3:通過Reflect看源碼,查了幾個(gè)基類,也沒見著特殊。。。懷疑得不到解決,納悶升級。。。 
3:之后我在閃存里了點(diǎn)條閃存說這問題,也在QQ群發(fā)了點(diǎn)相似的內(nèi)容。。。反正就有點(diǎn)納悶中無解。 
4:幾小時(shí)之后,我放棄了,你妹夫的,不弄了。。神一般的簡直無解。
5:感覺東西開的太多了,我就關(guān)掉了一些,其中包括文件夾。
6:寫代碼的天性,問題不解決,又回頭折騰。


問題失蹤了???? 

這回運(yùn)行,一切正常了,產(chǎn)生多少并發(fā)也沒報(bào)那錯(cuò)。。。你妹的咋回事,這么神奇????
于是我又去看了那個(gè)創(chuàng)建的文件有沒有問題。。。。
回頭一運(yùn)行。。你妹夫的,又拋異常了。。。


突然意識(shí)到了什么,經(jīng)過幾個(gè)拋異常,不拋異常的輪回折騰,終發(fā)現(xiàn)這個(gè)神般無解的的BUG:

原來是查看文件時(shí),等于該文件被鼠標(biāo)focus選定了原因,處于被forcus狀態(tài)的文件,頻繁的寫入就拋那異常了。


這BUG多無解,你妹:

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ASPX文件轉(zhuǎn)HTML
C#中對文件File常用操作方法的工具類
如何:使用命名管道通過網(wǎng)絡(luò)在進(jìn)程之間進(jìn)行通信
C#創(chuàng)建日志方法
用Java程序獲取絕對路徑
java對文件操作例子輔助類1
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服