【问题标题】:Storing data from database in static property将数据库中的数据存储在静态属性中
【发布时间】:2011-03-25 22:38:44
【问题描述】:

我有一个 ASP.Net 网站,其中的数据来自 ISeries。 与 ISeries 的数据连接非常慢,速度对于这个网站非常重要。由于从 ISeries 检索数据的速度很慢,我希望尽可能少地建立数据库连接。 所以,我正在考虑从数据库中存储表,这些表在我的网站中很少作为静态属性更改。每当用户登录时,我都会提交一个线程来刷新静态属性中的数据。 这种方法正确吗?如果不是,这种方法有什么问题,有哪些可能的替代方案?

例子:-

对于端口列表,我在用户登录时提交以下线程:-

 // Get Ports list
    Thread threadPorts = new Thread(delegate()
    {
        Ports.getPortList();
    });
    threadPorts.Start();
    Session["threadPorts"] = threadPorts;

在 Ports 类中,有 2 种方法 - 一种用于填充静态属性 PortList, 另一个检查线程是否处于活动状态并等待线程完成并在完成后检索端口列表。第二种方法是我在需要端口列表(填充下拉列表等)时在应用程序中使用的方法。

  public static void getPortList()
{
    DataTable dt = new DataTable();
    DB2Connection conn = new DB2Connection(ConfigurationManager.ConnectionStrings["db2IBM"].ConnectionString);
    conn.Open();

    string query = query to get ports from ISeries;

    DB2Command cmd = new DB2Command(query, conn);
    cmd.CommandType = CommandType.Text;

    DB2DataAdapter adp = new DB2DataAdapter(cmd);
    adp.Fill(dt);

    cmd.Dispose();
    conn.Close();

    List<Port> list = new List<Port>();
    foreach (DataRow row in dt.Rows)
    {
        list.Add(new Port(row[0].ToString(), row[1].ToString(), row[2].ToString(), row[3].ToString()));
    }

    StaticProp.PortList = list;
}

public static List<Port> getPortListfromSession()
{
    List<Port> portList = new List<Port>();
    if (System.Web.HttpContext.Current.Session["threadPorts"] != null)
    {
        Thread t = (Thread)System.Web.HttpContext.Current.Session["threadPorts"];
        if (t != null)
        {
            if (t.IsAlive)
            {
                t.Join();
            }
        }
    }

    if (System.Web.HttpContext.Current.Session["threadPorts"] != null)
        System.Web.HttpContext.Current.Session.Remove("threadPorts");

    portList = StaticProp.PortList;
    return portList;
}

【问题讨论】:

  • 那么您为什么不能每月花费 5 美元从某个托管服务提供商处获得 SQL Server 数据库?
  • 数据库对业务至关重要,它必须在 As400 (ISeries) 上,不幸的是我无法将它移动到其他任何地方。我使用的方法有问题吗?与我的问题相关的文件只是数据库中大量文件中的一小部分。
  • 好吧,您在问题中说数据库服务器的速度很慢,但速度很重要。然后你谈到将数据访问层与业务层合并。我个人认为这不是一个好主意,但如果你别无选择,那就是它。

标签: asp.net multithreading static


【解决方案1】:

我认为 ISeries 是一个外部数据库!

为什么不从该数据库中获取数据并将其粘贴到您自己的数据库中,然后单独更新呢? 然后,您可以快速查询您自己的数据库,并根据您认为合适的频率更新您的数据库,或者您可以使用文件,我个人首选的文件数据格式是 Json,而不是 XML - 但数据库要好得多。

【讨论】:

  • ISeries 是 IBM AS400。数据库中的文件可能会被 as400 上的某个其他进程更新,因此在 sql server 上复制数据库可能会产生更多问题。我的方法有什么问题吗?
猜你喜欢
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 2012-08-29
  • 2018-10-16
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
相关资源
最近更新 更多