永恒的记忆521 2019-04-25 14:24 采纳率: 0%
浏览 327

.net生成大量静态页面速度问题(新手)

.net生成大量静态页面速度太慢,想使用多线程解决这个问题。但不会用。请大家帮忙!!!!现在1000多条新闻要三四分钟。
附上需要修改的代码:

protected void wznewxq_Click(object sender, EventArgs e)
    {
        string q1 = "select NS_Id from NewsSort where NS_Stop=0 order by NS_Order desc";
        DataSet qq1 = DBHelper.GetDataSet(q1);
        int a = 0;
        for (int q = 0; q < qq1.Tables[0].Rows.Count; q++)
        {
            string w1 = "select * from News,NewsSort where News.N_Sortid=NewsSort.NS_Id and N_Sortid=" + qq1.Tables[0].Rows[q]["NS_Id"] + " and N_Show=1 order by N_Order desc";
            DataSet ww1 = DBHelper.GetDataSet(w1);
            string w2 = "select top 1 N_Order from News where N_Sortid=" + qq1.Tables[0].Rows[q]["NS_Id"] + " and N_Show=1 order by N_Order desc";
            DataSet ww2 = DBHelper.GetDataSet(w2);
            string w3 = "select top 1 N_Order from News where N_Sortid=" + qq1.Tables[0].Rows[q]["NS_Id"] + " and N_Show=1 order by N_Order asc";
            DataSet ww3 = DBHelper.GetDataSet(w3);
            for (int m = 0; m < ww1.Tables[0].Rows.Count; m++)
            {
                //替换掉模板中的特征字符     
                string mbPath = Server.MapPath("/manager/n134.html");
                Encoding code = Encoding.GetEncoding("UTF-8");
                StreamReader sr = null;
                StreamWriter sw = null;
                string str = null;
                //读取     
                try
                {
                    sr = new StreamReader(mbPath, code);
                    str = sr.ReadToEnd();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    sr.Close();
                }
                Inittail();
                Inittop();
                StringBuilder sq = new StringBuilder();
                sq.Append("<div class=\"ncont_page\">" + "\n");
                if (Convert.ToString(ww1.Tables[0].Rows[m]["N_Order"]) == Convert.ToString(ww2.Tables[0].Rows[0]["N_Order"]) && Convert.ToString(ww1.Tables[0].Rows[m]["N_Order"]) == Convert.ToString(ww3.Tables[0].Rows[0]["N_Order"]))
                {
                    sq.Append("<p class=\"l\">上一篇:没有了</p>" + "\n");
                    sq.Append("<p class=\"r\">下一篇:没有了</p>" + "\n");
                }
                else if (Convert.ToString(ww1.Tables[0].Rows[m]["N_Order"]) == Convert.ToString(ww2.Tables[0].Rows[0]["N_Order"]) && Convert.ToString(ww1.Tables[0].Rows[m]["N_Order"]) != Convert.ToString(ww3.Tables[0].Rows[0]["N_Order"]))
                {
                    string r2 = "select top 1 N_Url,N_Name from News where N_Order < " + ww1.Tables[0].Rows[m]["N_Order"] + " and N_Show=1 and N_Sortid=" + qq1.Tables[0].Rows[q]["NS_Id"] + " order by N_Order desc";
                    DataSet t2 = DBHelper.GetDataSet(r2);
                    sq.Append("<p class=\"l\">上一篇:没有了</p>" + "\n");
                    sq.Append("<p class=\"r\">下一篇:<a href = \"" + t2.Tables[0].Rows[0]["N_Url"] + "\" title=\"" + t2.Tables[0].Rows[0]["N_Name"] + "\">" + t2.Tables[0].Rows[0]["N_Name"] + "</a></p>" + "\n");
                }
                else if (Convert.ToString(ww1.Tables[0].Rows[m]["N_Order"]) == Convert.ToString(ww3.Tables[0].Rows[0]["N_Order"]) && Convert.ToString(ww1.Tables[0].Rows[m]["N_Order"]) != Convert.ToString(ww2.Tables[0].Rows[0]["N_Order"]))
                {
                    string r1 = "select top 1 N_Url,N_Name from News where N_Order > " + ww1.Tables[0].Rows[m]["N_Order"] + " and N_Show=1 and N_Sortid=" + qq1.Tables[0].Rows[q]["NS_Id"] + " order by N_Order asc";
                    DataSet t1 = DBHelper.GetDataSet(r1);
                    sq.Append("<p class=\"l\">上一篇:<a href = \"" + t1.Tables[0].Rows[0]["N_Url"] + "\" title=\"" + t1.Tables[0].Rows[0]["N_Name"] + "\">" + t1.Tables[0].Rows[0]["N_Name"] + "</a></p>" + "\n");
                    sq.Append("<p class=\"r\">下一篇:没有了 </p>" + "\n");
                }
                else
                {
                    string r1 = "select top 1 N_Url,N_Name from News where N_Order > " + ww1.Tables[0].Rows[m]["N_Order"] + " and N_Show=1 and N_Sortid=" + qq1.Tables[0].Rows[q]["NS_Id"] + " order by N_Order asc";
                    DataSet t1 = DBHelper.GetDataSet(r1);
                    string r2 = "select top 1 N_Url,N_Name from News where N_Order < " + ww1.Tables[0].Rows[m]["N_Order"] + " and N_Show=1 and N_Sortid=" + qq1.Tables[0].Rows[q]["NS_Id"] + " order by N_Order desc";
                    DataSet t2 = DBHelper.GetDataSet(r2);
                    sq.Append("<p class=\"l\">上一篇:<a href = \"" + t1.Tables[0].Rows[0]["N_Url"] + "\" title=\"" + t1.Tables[0].Rows[0]["N_Name"] + "\">" + t1.Tables[0].Rows[0]["N_Name"] + "</a></p>" + "\n");
                    sq.Append("<p class=\"r\">下一篇:<a href = \"" + t2.Tables[0].Rows[0]["N_Url"] + "\" title=\"" + t2.Tables[0].Rows[0]["N_Name"] + "\">" + t2.Tables[0].Rows[0]["N_Name"] + "</a></p>" + "\n");
                }
                sq.Append("</div>" + "\n");
                string[] ids;
                string sn = ww1.Tables[0].Rows[m]["N_Pid"].ToString();
                StringBuilder xa1 = new StringBuilder();
                StringBuilder xa = new StringBuilder();
                if (sn != "")
                {
                    xa.Append("<div id=\"pro\" class=\"proj_pro\">" + "\n");
                    xa.Append("<h2>相关产品</h2>" + "\n");
                    xa.Append("<ul>" + "\n");
                    ids = sn.Split(',');
                    if (ids.Length >= 4)
                    {
                        for (int k = 0; k < 4; k++)
                        {
                            int id = Convert.ToInt32(ids[k]);
                            string wa = "select P_Url,P_Pic,P_Name from Product where P_Id=" + id + "";
                            DataSet ws = DBHelper.GetDataSet(wa);
                            xa.Append("<li>" + "\n");
                            xa.Append("<a href=\"" + ws.Tables[0].Rows[0]["P_Url"] + "\"><img src=\"" + ws.Tables[0].Rows[0]["P_Pic"] + "\" alt=\"" + ws.Tables[0].Rows[0]["P_Name"] + "\" /></a>" + "\n");
                            xa.Append("<a href=\"" + ws.Tables[0].Rows[0]["P_Url"] + "\">" + "\n");
                            xa.Append("<p>" + ws.Tables[0].Rows[0]["P_Name"] + "</p>" + "\n");
                            xa.Append("</a>" + "\n");
                            xa.Append("</li>" + "\n");
                        }
                    }
                    else
                    {
                        for (int k = 0; k < ids.Length; k++)
                        {
                            int id = Convert.ToInt32(ids[k]);
                            string wa = "select P_Url,P_Pic,P_Name from Product where P_Id=" + id + "";
                            DataSet ws = DBHelper.GetDataSet(wa);
                            xa.Append("<li>" + "\n");
                            xa.Append("<a href=\"" + ws.Tables[0].Rows[0]["P_Url"] + "\">" + "\n");
                            xa.Append("<img src=\"" + ws.Tables[0].Rows[0]["P_Pic"] + "\" alt=\"" + ws.Tables[0].Rows[0]["P_Name"] + "\" /></a>" + "\n");
                            xa.Append("<a href=\"" + ws.Tables[0].Rows[0]["P_Url"] + "\">" + "\n");
                            xa.Append("<p>" + ws.Tables[0].Rows[0]["P_Name"] + "</p>" + "\n");
                            xa.Append("</a>" + "\n");
                            xa.Append("</li>" + "\n");
                        }
                    }
                    xa.Append("</ul>" + "\n");
                    xa.Append("</div>" + "\n");
                }
                string[] idm;
                string snm = ww1.Tables[0].Rows[m]["N_Nlistid"].ToString();
                StringBuilder mm1 = new StringBuilder();
                if (snm != "")
                {
                    mm1.Append("<div id =\"rptnews\" class=\"ncont_news\">" + "\n");
                    mm1.Append("<h2>相关新闻</h2>" + "\n");
                    mm1.Append("<ul>" + "\n");
                    idm = snm.Split(',');
                    for (int k = 0; k < idm.Length; k++)
                    {
                        int id = Convert.ToInt32(idm[k]);
                        string wa = "select * from News where N_Id=" + id + "";
                        DataSet ws = DBHelper.GetDataSet(wa);
                        mm1.Append("<li>" + "\n");
                        mm1.Append("<a href =\"" + ws.Tables[0].Rows[0]["N_Url"] + "\">" + ws.Tables[0].Rows[0]["N_Name"] + "</a>" + "\n");
                        mm1.Append("</li>" + "\n");
                    }
                    mm1.Append("</ul>" + "\n");
                    mm1.Append("</div>" + "\n");
                }
                string mx1 = mm1.ToString();
                string xx1 = xa.ToString();
                string st = sq.ToString();
                string biaoti = ww1.Tables[0].Rows[m]["N_Name"].ToString();
                string Ncaption = ww1.Tables[0].Rows[m]["N_Title"].ToString();
                string Nkeyword = ww1.Tables[0].Rows[m]["N_Keywords"].ToString();
                string Ndescribe = ww1.Tables[0].Rows[m]["N_Description"].ToString();
                string dizhi = ww1.Tables[0].Rows[m]["NS_Name"].ToString();
                string weizhi = ww1.Tables[0].Rows[m]["NS_Url"].ToString();
                string time = ww1.Tables[0].Rows[m]["N_Date"].ToString();
                string conter = ww1.Tables[0].Rows[m]["N_Content"].ToString();
                //根据时间自动重命名,扩展名也可以自行修改    
                str = str.Replace("$stm$", st);
                str = str.Replace("$mx1$", mx1);
                str = str.Replace("$xx1$", xx1);
                str = str.Replace("$top$", top);
                str = str.Replace("$tail$", tail);
                str = str.Replace("$time$", time);
                str = str.Replace("$conter$", conter);
                str = str.Replace("$Ndescribe$", Ndescribe);
                str = str.Replace("$Nkeyword$", Nkeyword);
                str = str.Replace("$biaoti$", biaoti);
                str = str.Replace("$weizhi$", weizhi);
                str = str.Replace("$dizhi$", dizhi);
                str = str.Replace("$Ncaption$", Ncaption);
                string fileName = "" + ww1.Tables[0].Rows[m]["N_Url"] + "";
                //生成静态文件     
                try
                {
                    sw = new StreamWriter(Server.MapPath("/") + fileName, false, code);
                    sw.Write(str);
                    sw.Flush();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    sw.Close();   
                }
                a = m;
            }
        }
        Response.Write("<script>alert('共生成了" + a + "个页面。')</script>");
    }
  • 写回答

2条回答 默认 最新

  • threenewbee 2019-04-25 15:57
    关注

    主要看你性能瓶颈在哪里,如果是数据库或者磁盘IO而不是CPU(单核心负载很高,但是总体利用率差),多线程其实也没有什么用

    感觉你的查询相当不优化。而且放着asp.net的ViewEngine不用,自己造轮子拼接。

    评论

报告相同问题?

悬赏问题

  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员