我正在尝试创建一个应用程序,该应用程序将从自动生成的 excel 文件中提取一些数据。这可以通过 Access 轻松完成,但文件在 Excel 中,解决方案必须是一键式的。
出于某种原因,简单地遍历数据而不执行任何操作会很慢。下面的代码是我尝试从慢得多的东西优化它。经过几次尝试直接使用 Interop 类并通过不同的包装器,我已经开始使用 Linq to SQL。
我还在这里和谷歌上阅读了几个问题的答案。为了查看导致缓慢的原因,我删除了所有说明,但在相关部分保留了“i++”。它仍然很慢。我还尝试通过限制在第三行的 where 子句中检索到的记录数来优化它,但这不起作用。您的帮助将不胜感激。
谢谢你。
Dictionary<string,double> instructors = new Dictionary<string,double>();
var t = from c in excel.Worksheet("Course_201410_M1")
// where c["COURSE CODE"].ToString().Substring(0,4) == "COSC" || c["COURSE CODE"].ToString().Substring(0,3) == "COEN" || c["COURSE CODE"].ToString().Substring(0,3) == "GEIT" || c["COURSE CODE"].ToString().Substring(0,3) == "ITAP" || c["COURSE CODE"] == "PRPL 0012" || c["COURSE CODE"] == "ASSE 4311" || c["COURSE CODE"] == "GEEN 2312" || c["COURSE CODE"] == "ITLB 1311"
select c;
HashSet<string> uniqueForce = new HashSet<string>();
foreach (var c in t)
{
if(uniqueForce.Add(c["Instructor"]))
instructors.Add(c["Instructor"],0.0);
}
foreach (string name in instructors.Keys)
{
var y = from d in t
where d["Instructor"] == name
select d;
int i = 1;
foreach(var z in y)
{
//this is the really slow. It takes a couple of minutes to finish. The
// file has less than a 1000 records.
i++;
}
}