[英]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
}
這是過早的優化。 我們首先來看一下您的第一個代碼的優化程度。
List<T>
和string
都是引用類型。 因此,無論如何在方法調用期間都不會將它們壓入堆棧。 因此,將它們標記為ref
參數不會產生任何積極效果。
private void SyncImages(ref List<dynamic> WeightEntitiesToSync, ref string imagesPath, ref string weibridgeName)
同樣, List<T>
是引用類型,而兩個int
變量是值類型。 因此,不將它們壓入堆棧可能會有一些好處,但這並不重要。
private void SyncWeighEntityDataToLocalDB(ref List<dynamic> WeightEntitiesToSync, ref int lastTicketNo, ref int weighBridgeID)
綜上所述,這樣做的好處可能微不足道,以至於您最好將時間花在更嚴重和緊迫的問題上,而不要花太多時間來優化它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.