2016-03-02 77 views
0

在ASP.Net MVC4應用程序中,我使用以下代碼來處理轉到網絡研討會與會者報告(CSV格式)。處理文件時未被IIS釋放

由於某些原因,正在加載的文件不會被IIS釋放,並且在嘗試處理另一個文件時會造成問題。

你在這裏看到什麼不尋常的東西嗎?

的CSVHelper(CsvReader)是從https://joshclose.github.io/CsvHelper/

public AttendeesData GetRecords(string filename, string webinarKey) 
{ 
    StreamReader sr = new StreamReader(Server.MapPath(filename)); 
    CsvReader csvread = new CsvReader(sr); 
    csvread.Configuration.HasHeaderRecord = false; 
    List<AttendeeRecord> record = csvread.GetRecords<AttendeeRecord>().ToList(); 
    record.RemoveRange(0, 7); 
    AttendeesData attdata = new AttendeesData(); 
    attdata.Attendees = new List<Attendee>(); 
    foreach (var rec in record) 
    { 
     Attendee aa = new Attendee(); 
     aa.Webinarkey = webinarKey; 
     aa.FullName = String.Concat(rec.First_Name, " ", rec.Last_Name); 
     aa.AttendedWebinar = 0; 
     aa.Email = rec.Email_Address; 
     aa.JoinTime = rec.Join_Time.Replace(" CST", ""); 
     aa.LeaveTime = rec.Leave_Time.Replace(" CST", ""); 
     aa.TimeInSession = rec.Time_in_Session.Replace("hour", "hr").Replace("minute", "min"); 
     aa.Makeup = 0; 
     aa.RegistrantKey = Registrants.Where(x => x.email == rec.Email_Address).FirstOrDefault().registrantKey; 

     List<string> firstPolls = new List<string>() 
     { 
      rec.Poll_1.Trim(), rec.Poll_2.Trim(),rec.Poll_3.Trim(),rec.Poll_4.Trim() 
     }; 
     int pass1 = firstPolls.Count(x => x != ""); 

     List<string> secondPolls = new List<string>() 
     { 
      rec.Poll_5.Trim(), rec.Poll_6.Trim(),rec.Poll_7.Trim(),rec.Poll_8.Trim() 
     }; 
     int pass2 = secondPolls.Count(x => x != ""); 

     aa.FirstPollCount = pass1; 
     aa.SecondPollCount = pass2; 

     if (aa.TimeInSession != "") 
     { 
      aa.AttendedWebinar = 1; 
     } 
     if (aa.FirstPollCount == 0 || aa.SecondPollCount == 0) 
     { 
      aa.AttendedWebinar = 0; 
     } 

     attdata.Attendees.Add(aa); 
     attendeeToDB(aa); // adds to Oracle DB using EF6. 
    } 
    // Should I call csvread.Dispose() here? 
    sr.Close(); 
    return attdata; 
} 
+0

任何機會,它的示數出來,所以不關閉文件? theres小錯誤檢查,例如,您刪除一些記錄,但沒有檢查,以查看記錄存在。我會處理讀者和原始流。 – BugFinder

回答

1

是。你也必須處理對象。

sr.Close(); 
csvread.Dispose(); 
sr.Dispose(); 

更好的策略使用使用關鍵字。

1

您應該爲您的流媒體閱讀器和作者使用usings。

您應該遵循一些命名約定(列表中包含始終多個條目,重命名記錄記錄)

你應該用明確的名稱(不AA)