簡體   English   中英

極慢的Linq到Excel

[英]Extremely Slow Linq to Excel

我正在嘗試創建一個應用程序,該應用程序將從自動生成的Excel文件中提取一些數據。 使用Access可以很容易地做到這一點,但是文件在Excel中,解決方案必須是一鍵式的事情。

由於某些原因,簡單地循環訪問數據而不執行任何操作很慢。 下面的代碼是我嘗試從慢得多的東西進行優化。 在直接和通過不同的包裝器與Interop類進行幾次嘗試之后,我開始使用Linq to SQL。

我還閱讀了有關此處和Google的一些問題的答案。 為了查看導致速度慢的原因,我刪除了所有指令,但在相關部分中保留了“ 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++;
            }


        }

將構成var t的查詢放在方括號中,然后在其上調用ToList()。

     var t = (from c in excel.Worksheet("Course_201410_M1")
     select c).ToList();

由於linq的延遲/延遲執行模型,每當您對集合進行迭代時,除非您為其提供要使用的List,否則它將重新查詢數據源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM