自動生成された Excel ファイルからデータを抽出するアプリケーションを作成しようとしています。これは Access で非常に簡単に行うことができますが、ファイルは Excel であり、ソリューションはボタン 1 つで行う必要があります。
なんらかの理由で、アクションを実行せずにデータを単純にループすると遅くなります。以下のコードは、はるかに遅いものから最適化しようとした私の試みです。相互運用クラスを直接、またはさまざまなラッパーを介してこれを数回試みた後、Linq to SQL を使用することに到達しました。
こことGoogleでいくつかの質問への回答も読みました。速度低下の原因を突き止めるために、すべての命令を削除しましたが、関連するセクションから「i++」を除外しました。まだ非常に遅いです。また、3 行目の 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++;
}
}