如何在第一页加载时只读取和解析XML文件,而不是每页请求

时间:2014-08-20 18:59:09

标签: c# asp.net xml dataset

我一定不能理解它。 我创建了一个这样的静态类:

public static class oDs
{
    public static DataSet columnsxml
    {
        get
        {
            DataSet oDs = new DataSet();
            oDs.ReadXml(HttpContext.Current.Server.MapPath("~/App_Data/Columns.xml"));
            return oDs;
        }

    }
}

在Page_Load类中使用,如下所示:

foreach (DataRow row in oDs.columnsxml.Tables[0].AsEnumerable())
{
    MyCode()
}

我的期望是,因为我将类oDs静态化,所以它不会在每个页面请求上继续读取XML文件,但结果证明是错误的。如果我在运行时更改XML,则下一页请求将具有更新的信息。我担心这会对性能产生影响。 我是否还必须在静态类中执行MyCode()?

编辑:我知道企业库,但更愿意没有缓存。

1 个答案:

答案 0 :(得分:1)

一切都取决于你的目标。如果文件的内容是静态的,意味着它在应用程序生命周期中没有更改,那么您可以通过这种方式更改静态类:

public static class oDs
{
    private static DataSet _oDs;

    public static DataSet columnsxml
    {
        get
        {
            if (_oDs == null)
            {
                _oDs = new DataSet();
                _oDs.ReadXml(HttpContext.Current.Server.MapPath("~/App_Data/Columns.xml"));
            }
            return _oDs;
        }

    }
}

请注意,此代码不是安全的,因此您可能希望在那里添加锁定。

另一种选择是使用Global.asax中的Application_Start事件在应用程序启动时加载文件内容。