亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

更新自己,不要影響其他人

系統(tǒng) 1661 0

最近圍繞著c++和C#的討論越來越激烈,firelong努力著證明自己的觀點(diǎn),園子里一些大大們也在激烈的辯證著,作為小鳥的我,旁觀,看看一笑而過吧。

其實(shí)無論哪種語言,肯定有它的優(yōu)勢(shì)和劣勢(shì),我們何必去爭個(gè)你死我活呢?我承認(rèn)firelong有些觀點(diǎn)正確,但這些會(huì)影響我們嗎?我相信有一定基礎(chǔ)的程序員,都不會(huì)去在意,因?yàn)槲覀冞x擇的不僅僅是語言,或許還有更多,如果單單靠某些人的一些觀點(diǎn),我們就改變了,那也太沒立場了,變成墻頭草了不是?

但我很喜歡看這種討論,因?yàn)閒irelong把自己的觀點(diǎn),例子舉了出來,而不是理論上的進(jìn)行駁斥,這種文章看出來是作者用心實(shí)踐過的,我們應(yīng)該支持,對(duì)于那種沒有實(shí)踐,只是一再的崇拜或者詆毀的人,出來就是辱罵的,大家一起來鄙視下吧。

今天不是為了參與討論,正好今天遇到了個(gè)問題(其實(shí)一直懶得解決),符合了標(biāo)題,隨便說說,說的難聽了,大家見諒,笑笑而過吧。

問題其實(shí)很簡單,更新靜態(tài)變量的值,而這個(gè)值呢,又是從linq to sql中獲取的,大概的結(jié)構(gòu)如下:

    
    
    
      public class 
    
    
      MyConfig

    
    
    
      {

        
    
    
      private static 
    
    
      DataLoader 
    
    
      s_loader;



        
    
    
      static 
    
    
      MyConfig()

        {

            s_loader = 
    
    
      new 
    
    
      DataLoader
    
    
      ();

        }



        
    
    
      public static 
    
    
      List
    
    
      <
    
    
      Company
    
    
      > AllCompanies

        {

            
    
    
      get

            
    
    
      {

                
    
    
      return 
    
    
      s_loader.GetAllCompanies();

            }

        }



        
    
    
      public static 
    
    
      List
    
    
      <
    
    
      MyType
    
    
      > AllTypes

        {

            
    
    
      get

            
    
    
      {

                
    
    
      return 
    
    
      s_loader.GetAllTypes();

            }

        }

    }
    
  

?

簡單的一個(gè)獲取配置信息的一個(gè)類(這是舉例用的,實(shí)際使用中并不是這樣)。

DataLoader 是與數(shù)據(jù)庫相關(guān)的一個(gè)操作類,主要是通過linq to sql 來獲取數(shù)據(jù)庫中的信息。

代碼:

    
      public class 
    
    
      DataLoader

    
    
    
      {

        
    
    
      public 
    
    
      DataLoader()

        {


    
    
              }



        
    
    
      DataClasses1DataContext 
    
    
      context = 
    
    
      new 
    
    
      DataClasses1DataContext
    
    
      ();



        
    
    
      internal 
    
    
      List
    
    
      <
    
    
      MyType
    
    
      > GetAllTypes()

        {

            

            
    
    
      return 
    
    
      context.MyType.ToList();

        }



        
    
    
      internal 
    
    
      List
    
    
      <
    
    
      Company
    
    
      > GetAllCompanies()

        {

            
    
    
      return 
    
    
      context.Company.ToList();

        }

    }
    
  

代碼丑了點(diǎn),見諒見諒,主要的目的只有2個(gè),獲取所有類型和獲取所有公司。

實(shí)際運(yùn)用在了web項(xiàng)目中,又有另外一個(gè)后臺(tái)專門來修改數(shù)據(jù),這時(shí)候就出現(xiàn)了一個(gè)問題,默認(rèn)情況下,linq to sql 會(huì)從緩存中獲取數(shù)據(jù)。

操作步驟如下:循環(huán)讀取MyType-》無論利用什么方法,修改數(shù)據(jù)庫的MyType值-》再次讀取。

因?yàn)橛昧嗣钚许?xiàng)目來實(shí)驗(yàn)的,那必須修改前和修改后都不能關(guān)閉命令行程序。以下簡單的測試代碼:

    
    
    
      static void 
    
    
      Main(
    
    
      string
    
    
      [] args)

        {

            
    
    
      var 
    
    
      key = 
    
    
      String
    
    
      .Empty;

            
    
    
      while 
    
    
      (key != 
    
    
      "quit"
    
    
      )

            {

                key = 
    
    
      Console
    
    
      .ReadLine();

                
    
    
      MyConfig
    
    
      .AllTypes.ForEach(c => 
    
    
      Console
    
    
      .WriteLine(c.Title));

                
    
    
      MyConfig
    
    
      .AllCompanies.ForEach(c => 
    
    
      Console
    
    
      .WriteLine(c.Name));

            }



            
    
    
      Console
    
    
      .WriteLine(
    
    
      "program to quit..."
    
    
      );

            
    
    
      //Console.ReadLine();

        
    
    
      }
    
  

測試很簡單,只要不輸入quit,每次都會(huì)輸出類型標(biāo)題和公司名稱。看下前后結(jié)果:

image (修改前讀取的數(shù)據(jù))

image image (利用Sql Manager Studio修改數(shù)據(jù))

? image (修改后讀取的數(shù)據(jù))

?

看到了,這就是linq to sql 的緩存造成的結(jié)果,為了避免這個(gè)情況,我們可以使用以下方法:

1、把DataContext.ObjectTrackingEnabled屬性設(shè)置為false

???? 因?yàn)閘inq to sql獲取數(shù)據(jù)緩存的時(shí)候,先檢索標(biāo)識(shí)是否改變,如果未改變,則會(huì)用緩存中的數(shù)據(jù)。而ObjectTrackingEnabled設(shè)為false后,會(huì)關(guān)閉標(biāo)識(shí)管理和變化跟蹤,那樣每次獲取都會(huì)是最新的數(shù)據(jù)。(以下是重新測試結(jié)果,測試前數(shù)據(jù)恢復(fù))

image ??? ----?? image

目的是達(dá)到了,我們知道關(guān)閉ObjectTrackingEnabled屬性,是一個(gè)好的提升性能的方式,但有時(shí)候也會(huì)造成一定的麻煩,比如更新、比如我要獲取一對(duì)多,多對(duì)多的對(duì)象時(shí)。(其實(shí)是自己一開始沒注意到,等改了以后發(fā)現(xiàn)項(xiàng)目中。。。。已經(jīng)慘不忍睹了,綠一下自己)。

2、DataContext.Refresh方法。

????? 使用指定方法刷新實(shí)體對(duì)象(摘自msdn)。使用它以后,我能更新自己,而不影響其他人了。Refresh的方法,大家可以看msdn,我就寫下代碼吧,代碼只修改了獲取類型的方法。

    
      internal 
    
    
      List
    
    
      <
    
    
      MyType
    
    
      > GetAllTypes()

        {

            
    
    
      var 
    
    
      types = context.MyType.ToList();



            context.Refresh(
    
    
      RefreshMode
    
    
      .KeepChanges, types);



            
    
    
      return 
    
    
      types;

        }
    
  

我們?cè)贉y試下(數(shù)據(jù)恢復(fù)先,直接上結(jié)果了):

image

實(shí)驗(yàn)成功,獲取到了最新的MyType值,而公司的值則是修改前的,當(dāng)然在程序下次運(yùn)行的時(shí)候,就會(huì)變成最新的了。

3、重新實(shí)例化DataContext。(不說了)

?

以上東東純屬亂寫,只是自己遇到的一個(gè)問題,可能寫的不好,大家也不要拼命砸磚哦。

?

再說說最近的激辯吧,大家也不要辯論什么了,只要做好自己,努力提高自己就好,我們?cè)趯?shí)際應(yīng)用中,會(huì)遇到許許多多的項(xiàng)目,每個(gè)項(xiàng)目的開始,都會(huì)商量好用什么語言來寫,什么框架來建,不要為了哪個(gè)語言好哪個(gè)語言不好去爭個(gè)不休,每個(gè)項(xiàng)目都會(huì)有不同的需求,用最適合的而不是用最好的,那就行了。

更新自己,不要影響其他人


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 在线亚洲欧洲国产综合444 | 亚洲国产一区在线 | 久久精品国产视频在热 | 精品国产夜色在线 | 狠狠色欧美亚洲综合色黑a 狠狠色视频 | 日韩毛片基地一区二区三区 | 国产精品热久久 | 性感毛片| 国产精品久久久久久久久99热 | xxxx性xx另类 | 91亚洲视频在线观看 | 干天天 | 久久99精品久久久久久噜噜丰满 | 破处一级片| 在线观看日韩欧美 | 国产精品久久国产精麻豆99网站 | 一级毛片看真人在线视频 | 欧日韩美香蕉在线观看 | 亚洲精品国产一区二区三区四区 | 美女又黄又免费的视频 | 欧美一区二区在线观看视频 | 玖玖玖精品视频免费播放 | 久久人人爽人人爽 | 精品一区二区三区视频在线观看免 | 亚洲看黄 | 99精品视频在线观看re | 亚洲综合成人网 | 久久99精品福利久久久 | 91久久亚洲最新一本 | 久久久国产精品va麻豆 | 成人影院在线观看 | 国产精品九九久久一区hh | 四虎最新视频 | 免费大片黄在线观看yw | 久久久精品久久视频只有精品 | 日韩在线观看中文字幕 | 欧美日韩国产最新一区二区 | 99久久国产免费中文无字幕 | 日本一级毛片不卡免费 | 夜夜爱夜夜爽夜夜做夜夜欢 | 亚洲国产国产综合一区首页 |