我在 C# WPF 中有以下代码
ConsultaDB consulta = new ConsultaDB();
foreach (var item in lista)
{
var cp = consulta.returnCP(item.Key);
if (cp.Length != 5)
{
//Some code here with the data returned
}
}
list
是超过 100K 元素的集合,ConsultaDB
对象具有以下代码:
class ConsultaDB
{
string CP;
OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=CCPP.accdb");
public string returnCP(string id)
{
var comm = conn.CreateCommand();
comm.CommandType = CommandType.Text;
comm.CommandText = "SELECT CP FROM CP WHERE ID='" + id+ "'";
var returnValue = comm.ExecuteScalar();
CP = returnValue.ToString();
return CP;
}
public ConsultaDB()
{
conn.Open();
}
}
这里的问题是所有对数据库的请求都需要花费大量时间才能完成。我看到循环运行良好,但肯定没有优化。
那么,如何提高该过程的速度?
最佳答案
不要逐一获取 CP,而是执行单个查询,该查询选择整个表,然后在表中进行迭代。将会大大提高速度。 您的查询将是:
"SELECT * FROM CP";
然后做类似的事情:
List<string> cps = table_name.AsEnumerable()
.Select(r=> r.Field<string>("...."))
.ToList();
来自一位经常使用 Access DB 的人的建议 - 始终使用参数化查询。它将为您节省大部分不兼容的类型错误。尤其是当您处理日期时...
关于c# - 加载数据的时间很长。大量数据。 C# 中的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33605832/