【发布时间】:2023-04-09 03:54:01
【问题描述】:
我有以下代码。有时执行此代码需要更长的时间。 需要改进代码。
//Get products from DB
DataTable dtProducts = GetAllProducts();
if(dtProducts !=null && dtProducts.Rows.Count >0)
{
dtProducts .DefaultView.RowFilter = null;
dtProducts .DefaultView.RowFilter = " product_id = '" +product_id.Trim() + "'";
DataTable dtProductCount = dtProducts .DefaultView.ToTable();
if (dtProductCount != null && dtProductCount.Rows.Count > 0)
{
object obj = dtProductCount.Compute("SUM(qty)", "");
if (!Convert.IsDBNull(obj))
{
int qtyProd = Convert.ToInt32(obj);
}
}
}
这里有任何性能改进的范围吗? 我们可以在数据表中使用 Any() 来代替 Count。
【问题讨论】:
-
我确信您观察到的性能差异与您无法控制的事情有关,例如当时数据库或网络发生的其他事情。
-
为什么不首先运行
select sum(qty) from db_table where product_id=@product_id_param? -
我假设
GetAllProducts查询数据库,如果是这种情况,您想要专注于加速而不是if语句。Count > 0和Any之间的差异可能可以忽略不计,我怀疑编译器甚至可能将它们编译成相同的代码,尽管我不确定。 -
如果这里的设计是通过 GetAllProducts() 获取所有内容,然后在客户端中对该结果执行过滤 - 不要,它很昂贵并且可能存在扩展问题。为此使用数据库本身,这是它的设计目的。
标签: c# asp.net performance