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

本文关键字:读取 和解 XML 文件 请求 一次 何仅 第一个 加载 | 更新日期: 2023-09-27 18:18:56

我一定是理解得不够好。我创建了一个这样的静态类:

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()
}

我的期望是,因为我将类od设置为静态,所以它不会在每个页面请求上都读取XML文件,但事实证明这是错误的。如果我在运行时对XML进行了更改,那么下一个页面请求将具有更新的信息。我担心这对性能的影响。我是否还必须在静态类中执行MyCode() ?

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

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

一切取决于你的目标。如果文件的内容是静态的,这意味着在应用程序生命周期中不会更改它,那么您可以这样稍微更改静态类:

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中使用Application_Start事件。