我有一个ASP.Net网站,其中数据来自ISeries。 与ISeries的数据连接速度非常慢,而且这个网站的速度非常重要。由于从ISeries检索数据的速度很慢,我希望尽可能减少数据库连接。 所以,我正在考虑从数据库中存储表,这些表很少在我的网站中作为静态属性进行更改。 Whenevera用户登录我提交了一个刷新静态属性中的数据的线程。 这种方法是否正确?如果没有,这种方法有什么问题,可能的替代方案是什么?
实施例: -
对于端口列表,我在用户登录时提交以下线程: -
// Get Ports list
Thread threadPorts = new Thread(delegate()
{
Ports.getPortList();
});
threadPorts.Start();
Session["threadPorts"] = threadPorts;
在类Ports中,有两种方法 - 一个用于填充静态属性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;
}
答案 0 :(得分:0)
我认为ISeries是一个外部数据库!
为什么不从该数据库中获取数据并将其粘贴在您自己的数据库中,并单独更新? 然后,您可以快速查询自己的数据库,并根据需要更新数据库,或者您可以使用文件,我个人的首选文件数据格式是Json,而不是XML - 但数据库要好得多。