2016-03-02 74 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)