簡體   English   中英

在C#中的循環內調用參數化方法的最佳方法是什么

[英]What is the best way to call a parameterized method inside a loop in C#

什么是更少的內存消耗設計?

我知道ref關鍵字通過引用傳遞參數&不會在函數參數內部使用新的內存引用。 我認為第一個設計將比第二個設計更有效率。 我對么?

1)。

public void SyncWeighEntityData(string sqlConnectionString, int weighBridgeID, string weibridgeName, int lastSyncedTicetNo, string imagesPath)
   {
       using (var cn = DBUtils.GetNewOpenConnection(sqlConnectionString))
       {

           var query = "SELECT * FROM [WeighEntry] WHERE TicketNo > @TicketNo";
           var lastTicketNo = cn.Query<int>("SELECT MAX(TicketNo) FROM [WeighEntry]").Single();
           var results = cn.Query(query, new { TicketNo = lastSyncedTicetNo }).ToList();
           results.ForEach(x => x.WeighBridgeID = weighBridgeID);
           cn.Close();


          SyncImages(ref results, ref imagesPath, ref weibridgeName);
           SyncWeighEntityDataToLocalDB(ref results, ref  lastTicketNo, ref weighBridgeID);
       }

   }

   private void SyncImages(ref List<dynamic> WeightEntitiesToSync, ref string imagesPath, ref string weibridgeName)
   {
       foreach (var item in WeightEntitiesToSync)
       {
           for (int i = 0; i < 4; i++)
           {
              SaveTicketImageOnLocalPath(Path.GetFullPath(CommonResources.DecodeFromBase64(imagesPath) + string.Format($"\\{item.TicketNo}_CropedIn.Jpg")), item.WeighBridgeID, weibridgeName, string.Format($"{item.TicketNo}_CropedIn.Jpg"));
           }
       }
   }

   private void SyncWeighEntityDataToLocalDB(ref List<dynamic> WeightEntitiesToSync, ref int lastTicketNo, ref int weighBridgeID)
   {
      // Code to save data
   }

或2)。

public void SyncWeighEntityData(string sqlConnectionString, int weighBridgeID, string weibridgeName, int lastSyncedTicetNo, string imagesPath)
   {
       using (var cn = DBUtils.GetNewOpenConnection(sqlConnectionString))
       {

           var query = "SELECT [TicketNo],[VihNo],[Supervisor],[Driver],[Cleaner],[SealNO1],[SealNO2],[SealNO3],[ContainerNo],[ItemDis],[TimeIn],[TimeOut],[Weigh1],[Weigh2],[Remarks1st],[Remarks2ed],[CustName],[DateIn],[DateOut],[GinorGrnNo],[UserName],[AccountBillCount],[StoresBillCount],[CustomerBillCount] FROM [WeighEntry] WHERE TicketNo > @TicketNo";
           var lastTicketNo = cn.Query<int>("SELECT MAX(TicketNo) FROM [WeighEntry]").Single();
           var results = cn.Query(query, new { TicketNo = lastSyncedTicetNo }).ToList();
           results.ForEach(x => x.WeighBridgeID = weighBridgeID);
           cn.Close();


          SyncImages( results,  imagesPath,  weibridgeName);
           SyncWeighEntityDataToLocalDB( results,   lastTicketNo,weighBridgeID);
       }

   }

   private void SyncImages( List<dynamic> WeightEntitiesToSync,  string imagesPath,  string weibridgeName)
   {
       foreach (var item in WeightEntitiesToSync)
       {
           for (int i = 0; i < 4; i++)
           {
              SaveTicketImageOnLocalPath(Path.GetFullPath(CommonResources.DecodeFromBase64(imagesPath) + string.Format($"\\{item.TicketNo}_CropedIn.Jpg")), item.WeighBridgeID, weibridgeName, string.Format($"{item.TicketNo}_CropedIn.Jpg"));
           }
       }
   }

   private void SyncWeighEntityDataToLocalDB( List<dynamic> WeightEntitiesToSync,  int lastTicketNo,  int weighBridgeID)
   {
      // Code to save data
   }

這是過早的優化。 我們首先來看一下您的第一個代碼的優化程度。

  1. List<T>string都是引用類型。 因此,無論如何在方法調用期間都不會將它們壓入堆棧。 因此,將它們標記為ref參數不會產生任何積極效果。

     private void SyncImages(ref List<dynamic> WeightEntitiesToSync, ref string imagesPath, ref string weibridgeName) 
  2. 同樣, List<T>是引用類型,而兩個int變量是值類型。 因此,不將它們壓入堆棧可能會有一些好處,但這並不重要。

     private void SyncWeighEntityDataToLocalDB(ref List<dynamic> WeightEntitiesToSync, ref int lastTicketNo, ref int weighBridgeID) 

綜上所述,這樣做的好處可能微不足道,以至於您最好將時間花在更嚴重和緊迫的問題上,而不要花太多時間來優化它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM