繁体   English   中英

IIS在处理时未释放文件

[英]File not being released by IIS when processing

在ASP.Net MVC4应用程序中,我正在使用以下代码来处理“转到网络研讨会参与者”报告(CSV格式)。

由于某种原因,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;
}

是。 您也必须处置对象。

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

使用关键字的更好策略。

您应该为您的流阅读器和编写器使用usings。

您应遵循一些命名约定(列表始终包含多个条目,将记录重命名为记录)

您应该使用清晰的名称(而不是aa)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM