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

C#避免回溯方法心得

 更新時間:2014年09月15日 10:10:07   投稿:shichen2014  
這篇文章主要介紹了C#避免回溯方法,以實例的形式講述了回溯方法的弊端及解決處理方法,是非常實用的技巧,需要的朋友可以參考下

本文實例講述了C#避免回溯方法,分享給大家供大家參考之用。具體分析如下:

首先,回溯法是不可控的,有時候會超出我們意料之外產(chǎn)生不妙的結(jié)果,最常見的也就是內(nèi)存泄漏。。

回溯方法是很容易想到,又不容易想到的,往往,我們思維更容易進(jìn)入的是回溯法。但是回溯法有著它的弊端,非常明顯的弊端是作用域內(nèi)產(chǎn)生的變量和引用在回溯法調(diào)用未完成時,不能釋放(對于大部分編輯器來說,排除有著優(yōu)化能力的編輯器)。如果我們在某一方法中使用極多的回溯調(diào)用,在方法中不能及時的對方法作用域內(nèi)的變量和引用釋放,最終會造成內(nèi)存不足和cpu的計算負(fù)荷增大(內(nèi)存機(jī)制中可以將過剩的數(shù)據(jù)轉(zhuǎn)存到虛擬內(nèi)存、硬盤,這個就不說了)。使用棧(隊)式的循環(huán),可以輕易避免回溯法,而且棧(隊)式的數(shù)據(jù)再使用之后可以很方便的拋出移除。某些時候就是這樣,一個小小的改動,可以讓一個程序在某種特定的環(huán)境中起死回生。(之前做過一個數(shù)獨運(yùn)算器的算法,后來的優(yōu)化改進(jìn)就是為了避免回溯)

示例代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace 避免回溯方法
{
  class Program
  {
    static void Main(string[] args)
    {
      string path = AppDomain.CurrentDomain.BaseDirectory;

      List<string> fileList1 = new List<string>();
      FunctionHuishuo(path, ref fileList1);

      List<string> fileList2 = new List<string>();
      FunctionQueue(path, ref fileList2);

      List<string> fileList3 = new List<string>();
      FunctionStack(path, ref fileList3);
    }

    /// <summary>
    /// 回溯法
    /// </summary>
    /// <param name="path"></param>
    /// <param name="fileList"></param>
    private static void FunctionHuishuo(string path, ref List<string> fileList)
    {
      if (true)
      {
        string[] files = null;
        try
        {
          files = Directory.GetFiles(path);
        }
        catch { }

        if (files != null && files.Length > 0)
        {
          fileList.AddRange(files);
        }
      }

      if (true)
      {
        string[] folders = null;
        try
        {
          folders = Directory.GetDirectories(path);
        }
        catch { }

        if (folders != null && folders.Length > 0)
        {
          foreach (string folder in folders)
          {
            FunctionHuishuo(folder, ref fileList);
          }
        }
      }
    }

    /// <summary>
    /// 堆棧法
    /// </summary>
    /// <param name="path"></param>
    private static void FunctionStack(string path, ref List<string> fileList)
    {
      Stack<string> stack = new Stack<string>();
      stack.Push(path);

      while (stack.Count > 0)
      {
        string dir = stack.Pop();

        string[] files = null;
        try
        {
          files = Directory.GetFiles(dir);
        }
        catch { }

        if (files != null && files.Length > 0)
        {
          fileList.AddRange(files);
        }

        string[] folders = null;
        try
        {
          folders = Directory.GetDirectories(dir);
        }
        catch { }

        if (folders != null && folders.Length > 0)
        {
          foreach (string folder in folders)
          {
            stack.Push(folder);
          }
        }
      }
    }

    /// <summary>
    /// 隊列法
    /// </summary>
    /// <param name="path"></param>
    private static void FunctionQueue(string path, ref List<string> fileList)
    {
      Queue<string> queue = new Queue<string>();

      queue.Enqueue(path);

      while (queue.Count > 0)
      {
        string dir = queue.Dequeue();

        string[] files = null;
        try
        {
          files = Directory.GetFiles(dir);
        }
        catch { }

        if (files != null && files.Length > 0)
        {
          fileList.AddRange(files);
        }

        string[] folders = null;
        try
        {
          folders = Directory.GetDirectories(dir);
        }
        catch { }

        if (folders != null && folders.Length > 0)
        {
          foreach (string folder in folders)
          {
            queue.Enqueue(folder);
          }
        }
      }
    }
  }
}

請仔細(xì)對比下三種循環(huán)結(jié)構(gòu)的寫法,特別注意下里面有用到  if(true){...}   ,這種方式在某些編輯環(huán)境中可以產(chǎn)生非常美妙的效果。

相信本文所述對大家C#程序設(shè)計的學(xué)習(xí)有一定的借鑒價值。

相關(guān)文章

  • winform c#中子窗體關(guān)閉刷新父窗體的實例

    winform c#中子窗體關(guān)閉刷新父窗體的實例

    下面小編就為大家?guī)硪黄獁inform c#中子窗體關(guān)閉刷新父窗體的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • C#中的Linq?to?JSON操作詳解

    C#中的Linq?to?JSON操作詳解

    本文詳細(xì)講解了C#中的Linq?to?JSON操作,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C#數(shù)據(jù)庫操作的示例詳解

    C#數(shù)據(jù)庫操作的示例詳解

    這篇文章主要通過一些示例為大家詳細(xì)介紹了C#中數(shù)據(jù)庫操作用法,文中的示例代碼講解詳細(xì),具有有一定的借鑒價值,需要的可以參考一下
    2022-07-07
  • C#讀取多條數(shù)據(jù)記錄導(dǎo)出到Word之圖片輸出改造

    C#讀取多條數(shù)據(jù)記錄導(dǎo)出到Word之圖片輸出改造

    這篇文章主要為大家詳細(xì)介紹了C#讀取多條數(shù)據(jù)記錄并導(dǎo)出到Word標(biāo)簽?zāi)0逯械膱D片輸出問題,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2024-11-11
  • C#中datagridview使用tooltip控件顯示單元格內(nèi)容的方法

    C#中datagridview使用tooltip控件顯示單元格內(nèi)容的方法

    這篇文章主要介紹了C#中datagridview使用tooltip控件顯示單元格內(nèi)容的方法,實例分析了C#控件的相關(guān)使用技巧,需要的朋友可以參考下
    2016-06-06
  • winform 使用Anchor屬性進(jìn)行界面布局的方法詳解

    winform 使用Anchor屬性進(jìn)行界面布局的方法詳解

    這篇文章主要介紹了winform 使用Anchor屬性進(jìn)行界面布局的方法,有需要的朋友可以參考一下
    2013-12-12
  • 探究C#訪問null字段會拋異常原因

    探究C#訪問null字段會拋異常原因

    本文主要介紹了探究C#訪問null字段會拋異常原因,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C#實現(xiàn)飛行棋游戲

    C#實現(xiàn)飛行棋游戲

    這篇文章主要為大家詳細(xì)介紹了C#實現(xiàn)飛行棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 簡單學(xué)習(xí)C#中的泛型方法使用

    簡單學(xué)習(xí)C#中的泛型方法使用

    這篇文章主要介紹了C#中的泛型方法使用,需要的朋友可以參考下
    2016-02-02
  • c#中如何去除字符串左邊的0

    c#中如何去除字符串左邊的0

    這篇文章主要介紹了c#中如何去除字符串左邊的0問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05

最新評論

正安县| 保靖县| 客服| 张掖市| 长寿区| 营口市| 毕节市| 赤城县| 泗洪县| 岑巩县| 永嘉县| 上犹县| 绿春县| 都昌县| 南平市| 阆中市| 鄯善县| 雷山县| 涪陵区| 大冶市| 邵阳县| 海丰县| 远安县| 沈丘县| 密山市| 鄂托克前旗| 同德县| 河曲县| 昌都县| 平顶山市| 资溪县| 高青县| 淮南市| 张家港市| 安吉县| 平山县| 从江县| 哈尔滨市| 宕昌县| 南乐县| 精河县|