是在循环中声明变量好,还是在循环中设置变量好?
本文关键字:变量 循环 设置 声明 | 更新日期: 2023-09-27 18:19:03
我有一个性能相关的查询,我试图了解哪个逻辑会更快。我的代码如下
list<string> test=new list<string>();
foreach (DataTable Dt in Product_DataSet.Tables)
{
foreach (DataRow dr in Product_DataTable.Rows)
{
test.add(dr["ColumnName"].tostring());
// Code to concatenate all string in list test to single variable
// Code to pass single variable to DB
}
}
在这里我遇到了问题,因为列表"测试"不断增长。所以我修改了我的内循环,像下面这样
foreach (DataRow dr in Product_DataTable.Rows)
{
test.add(dr["ColumnName"].tostring());
// Code to concatenate all string in list test to single variable
// Code to pass single variable to DB
test.Clear();
}
这是比
更好的选择吗?foreach (DataRow dr in Product_DataTable.Rows)
{
list<string> test=new list<string>();
test.add(dr["ColumnName"].tostring());
// Code to concatenate all string in list test to single variable
// Code to pass single variable to DB
}
最后一个选项与第一个选项没有可比性,因为您总是创建一个新列表,而不是填充相同的列表。因此,在最后,它只包含最后一个表的行,而不是所有表的行。
所以这取决于你的需要。如果每个DataTable
只需要一个,那么使用列表构造函数而不是List.Clear
稍微好一些,因为后者必须做更多的事情。
所以,如果你需要一个包含所有表的所有字符串的大列表,为什么不首先填充列表而不是加载表呢?你可以使用DataReader
在我看来,你的两个选择是:
for foreach (DataTable Dt in Product_DataSet.Tables)
{
list<string> test=new list<string>();
foreach (DataRow dr in Product_DataTable.Rows)
{
test.add(dr["ColumnName"].tostring();
}
//code to concat and send to db
}
或
list<string> test=new list<string>();
for foreach (DataTable Dt in Product_DataSet.Tables)
{
test.Clear();
foreach (DataRow dr in Product_DataTable.Rows)
{
test.add(dr["ColumnName"].tostring();
}
//code to concat and send to db
}
我非常怀疑它在性能方面有多少:在每种情况下,所有内容都必须被垃圾收集。但是你可以用大量的数据来测试它,看看会发生什么。