最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在C#中捕獲內(nèi)存不足異常

 更新時(shí)間:2021年12月27日 10:21:47   作者:conan  
這篇文章主要介紹了在C#中捕獲內(nèi)存不足異常,下面文章內(nèi)容圍繞如何在C#中捕獲內(nèi)存不足異常的相關(guān)資料展開(kāi)詳細(xì)內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你有所幫助

當(dāng)CLR未能分配所需的足夠內(nèi)存時(shí),將發(fā)生System.OutOfMemoryException。System.OutOfMemoryException繼承自System.SystemException類。OutOfMemoryException使用COR_E_OUTOFMEMORY值為 0x8007000E的 HRESULT 。

一個(gè)OutOfMemoryException異常異常主要有兩個(gè)原因:

我們?cè)噲D將StringBuilder對(duì)象擴(kuò)展到超出其StringBuilder.MaxCapacity屬性定義的長(zhǎng)度。

公共語(yǔ)言運(yùn)行時(shí)無(wú)法分配足夠的連續(xù)內(nèi)存來(lái)成功執(zhí)行操作。任何需要分配內(nèi)存的屬性分配或方法調(diào)用都可能引發(fā)此異常。

設(shè)置字符串-

string StudentName = "Tom";
string StudentSubject = "Maths";


現(xiàn)在您需要使用分配的容量進(jìn)行初始化,該容量是初始值的長(zhǎng)度-

StringBuilder sBuilder = new StringBuilder(StudentName.Length, StudentName.Length);


現(xiàn)在,如果您嘗試插入其他值,則會(huì)發(fā)生異常。

sBuilder.Insert(value: StudentSubject, index: StudentName.Length - 1, count: 1);


發(fā)生以下異常-

System.OutOfMemoryException: Out of memory


要捕獲錯(cuò)誤,請(qǐng)嘗試以下代碼-

示例:

 try
            {
                
                string videoSaveDir = CommonHelper.GetVideoDirectory();
                int setCount = 0;
                #region 模擬拋出OutOfMemoryException用
                //List<VideoExtend> dataSource = new List<VideoExtend>();
                //dataSource.Add(new VideoExtend() {  EHost="http://www.baidu.com",FileName="BAI.mp4"});
                #endregion
                
                if (dataSource != null)
                {
                    totalCount = dataSource.Count;
                }
                foreach (VideoExtend video in dataSource)
                {
                    try
                    {
                        setCount++;
                        string fileName = video.FileName;
                        string fileFullPath = videoSaveDir + fileName;
                        if (File.Exists(fileFullPath))
                        {
                            if (!JudgeFileStatus(fileFullPath, fileName))
                            {
                                continue;
                            }
                            string strFileSize = "";
                            if (!FileCanUpload(fileFullPath, out strFileSize))
                            {
                                //數(shù)據(jù)庫(kù)更新為上傳失敗,文件太大
                                if (mongoData == null)
                                {
                                    apiHelper.UpdateUploadToQiniuFileTooLarge(video.EHost);
                                }
                                else
                                {
                                    mongoData.UpdateUploadToQiniuFileTooLarge(video.EHost);

                                }
                                LogHelper.Log(LogFilePrefix+"uploadFileTooLarge", "文件" + fileName + "太大,大小為:" + strFileSize);
                                continue;
                            }
                            LogHelper.Log(LogFilePrefix + "uploadInfo", "開(kāi)始上傳" + setCount + "/" + totalCount + "文件:" + video.FileName);
                            string newFileName = "";
                            bool updateStatus = QiniuUtil.Upload(fileFullPath, out newFileName);
                            if (updateStatus)
                            {
                                if (mongoData == null)
                                {
                                    apiHelper.UpdateUploadToQiniuSuccessStatus(video.EHost, newFileName);
                                }
                                else
                                {
                                    mongoData.UpdateUploadToQiniuSuccessStatus(video.EHost, newFileName);//更新數(shù)據(jù)庫(kù)
                                }

                                LogHelper.Log(LogFilePrefix + "uploadsuccess", "上傳成功,源文件名:" + video.FileName + ";新文件名:" + newFileName);
                                if (JudgeFileStatus(fileFullPath, fileName))
                                {
                                    try
                                    {
                                        File.Delete(fileFullPath);
                                    }
                                    catch (Exception ex) { }
                                }
                                setCount++;
                            }
                        }
                        else
                        {
                            //把數(shù)據(jù)庫(kù)重置為要重新下載
                            if (mongoData == null)
                            {
                                apiHelper.UpdateUploadToQiniuLocalFileNotFound(video.EHost);
                            }
                            else
                            {
                                mongoData.UpdateUploadToQiniuLocalFileNotFound(video.EHost);

                            }
                            LogHelper.Log(LogFilePrefix + "uploadNoExisted", "文件不存在:" + fileName);
                            //throw new System.OutOfMemoryException();//模擬拋出OutOfMemoryException用
                        }
                    }
                    catch (System.OutOfMemoryException memoryEx)
                    {
                        Global.IsOutOfMemoryException = true;
                        LogHelper.LogWithLock(LogFilePrefix + "uploadOutOfMemoryException", "失敗,文件名" + video.FileName + ",異常信息:" + memoryEx.Message + ";內(nèi)部錯(cuò)誤" + memoryEx.InnerException?.Message);
                    }
                    catch (Exception ex)
                    {
                        LogHelper.Log(LogFilePrefix + "uploadError", "失敗,文件名" + video.FileName + ",異常信息:" + ex.Message + ";內(nèi)部錯(cuò)誤" + ex.InnerException.Message);
                    }
                    System.Threading.Thread.Sleep(5 * 1000);//休眠
                }
                if (setCount <= 0)
                {
                    LogHelper.Log(LogFilePrefix + "uploadInfo", "暫無(wú)新待上傳數(shù)據(jù)");
                }
                int sleepSecond = 30;
                LogHelper.Log(LogFilePrefix + "uploadInfo", "--休眠" + sleepSecond + "秒");
                System.Threading.Thread.Sleep(sleepSecond * 1000);//休眠
            }
            catch (Exception ex)
            {
                LogHelper.Log(LogFilePrefix + "uploadfullerror", "失敗,異常信息:" + ex.Message+ ";totalCount="+ totalCount);
            }

上面處理OutOfMemoryException并生成以下錯(cuò)誤-

輸出結(jié)果

Error:

    Global.IsOutOfMemoryException = true;
                        LogHelper.LogWithLock(LogFilePrefix + "uploadOutOfMemoryException", "失敗,文件名" + video.FileName + ",異常信息:" + memoryEx.Message + ";內(nèi)部錯(cuò)誤" + memoryEx.InnerException?.Message);

到此這篇關(guān)于在C#中捕獲內(nèi)存不足異常的文章就介紹到這了,更多相關(guān)C#捕獲內(nèi)存異常內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入理解C# 裝箱和拆箱(整理篇)

    深入理解C# 裝箱和拆箱(整理篇)

    通過(guò)裝箱和拆箱操作,能夠在值類型和引用類型中架起一做橋梁.換言之,可以輕松的實(shí)現(xiàn)值類型與引用類型的互相轉(zhuǎn)換
    2017-08-08
  • C#實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器功能

    C#實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Unity實(shí)現(xiàn)游戲傷害數(shù)字顯示HUD的方法

    Unity實(shí)現(xiàn)游戲傷害數(shù)字顯示HUD的方法

    游戲中收到傷害掉血,會(huì)有飄動(dòng)的傷害數(shù)值,本文主要介紹Unity實(shí)現(xiàn)游戲傷害數(shù)字顯示HUD的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C#中ftp檢測(cè)目錄是否存在和創(chuàng)建文件夾的實(shí)現(xiàn)

    C#中ftp檢測(cè)目錄是否存在和創(chuàng)建文件夾的實(shí)現(xiàn)

    本文主要介紹了C#中ftp檢測(cè)目錄是否存在和創(chuàng)建文件夾的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C#實(shí)現(xiàn)截圖幫助類

    C#實(shí)現(xiàn)截圖幫助類

    這篇文章介紹了C#實(shí)現(xiàn)截圖幫助類的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • winform綁定快捷鍵的方法

    winform綁定快捷鍵的方法

    這篇文章主要介紹了winform綁定快捷鍵的方法,涉及WinForm設(shè)置窗體按鍵事件的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • C#編寫的Base64加密和解密類

    C#編寫的Base64加密和解密類

    本文給大家匯總介紹了幾種C#編寫的Base64加密和解密類的代碼,從簡(jiǎn)單到復(fù)雜,都能夠?qū)崿F(xiàn)功能,有需要的小伙伴根據(jù)自己的項(xiàng)目需求參考下吧。
    2015-05-05
  • C#多線程系列之a(chǎn)sync和await用法詳解

    C#多線程系列之a(chǎn)sync和await用法詳解

    本文詳細(xì)講解了C#多線程中async和await的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • C#處理XML文件的示例詳解

    C#處理XML文件的示例詳解

    XML是一種標(biāo)記語(yǔ)言,是從標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言(SGML)中簡(jiǎn)化修改出來(lái)的,本文主要介紹了C#處理XML文件的相關(guān)知識(shí),有需要的小伙伴可以了解一下
    2024-11-11
  • C#8.0新語(yǔ)法using?declaration

    C#8.0新語(yǔ)法using?declaration

    這篇文章介紹了C#8.0的新語(yǔ)法using?declaration,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07

最新評(píng)論

四会市| 运城市| 襄汾县| 泰和县| 黔西县| 商水县| 二手房| 皋兰县| 前郭尔| 佛山市| 宁安市| 靖边县| 公主岭市| 海南省| 南乐县| 迁安市| 石泉县| 静乐县| 内黄县| 陇南市| 崇礼县| 海口市| 巩留县| 慈溪市| 佛山市| 石门县| 英吉沙县| 静宁县| 西安市| 黑水县| 青州市| 玉溪市| 黄浦区| 桃源县| 沙洋县| 澜沧| 新田县| 四子王旗| 仙桃市| 江油市| 铜鼓县|