股票K线加载速度慢

niunxy 2014-10-30 08:54:05
我用mschart做的股票k线,每天有240个数据点,显示一个月的数据点的速度还可以接受,时间再长一点速度加载就会很慢,显示一年的数据大概需要2-3分钟,请高手指点怎么加快加载速度。
主K线图是直接绑定的数据源。
K线图上每个点的数据提示是循环添加的。
5条均线是循环计算后添加的
...全文
2300 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
huier_2470303431 2014-11-06
  • 打赏
  • 举报
回复
使用柱形图分析股票走势示例 //加载数据库数据 protected void Page_Load(object sender, EventArgs e) { string cmdtxt1 =System.Configuration.ConfigurationManager.AppSettings["conn"].ToString(); SqlConnection Con = new SqlConnection(cmdtxt1); Con.Open(); SqlCommand Com = new SqlCommand("select * from tb_CarVote where ID=" + Request["ID"] + "", Con); SqlDataReader dr = Com.ExecuteReader(); dr.Read(); string strContent = null; if (dr.HasRows) { strContent = dr["Content"].ToString(); } dr.Close(); decimal decNumAll = GetNumAll(strContent);//得到所有票数,C#在除法运算中需用decimal类型,否则将会把小数点后的数去掉 Response.Write(GetResult(strContent, decNumAll)); } // 显示图象 // <param name="strContent">相关主题下的内容</param> // <param name="decNumAll">所有的票数</param> public string GetResult(string strContent, decimal decNumAll) { string[] arrContent = strContent.Split('|'); string strBody = "<body style=text-align:center><table width=60% border=1 cellpadding=0 cellspacing=0 text-align:center>\n"; foreach (string strContentIN in arrContent) { string strItemName = strContentIN.Split(',')[1].ToString();//得到选项名称 decimal decItemNum = Convert.ToDecimal(strContentIN.Split(',')[0]);//得到选项的投票数 decimal decPercent = GetPercent(decItemNum, decNumAll) * 100;//得到百分比 string strPercent = decPercent.ToString();//将百分比转为字符型 if (strPercent.Length > 5)//如果百分比结果长度超过5位 { strPercent = strPercent.Substring(0, 5);//将百分比的余数截短为“00.00” } strBody += "<tr><td width=100 style=font-size:9pt;text-align:center>" + strItemName + "</td><td width=50 style=font-size:9pt;color=red;text-align:center>" + decItemNum.ToString() + "票</td><td style=font-size:9pt><img src=Images/bar1.gif height=10 width=" + strPercent + "%>" + strPercent + "%</td></tr>\n"; } strBody += "</table></body>"; return strBody; } //票数求计算 public decimal GetNumAll(string strNum) { decimal decNumAll = 0; string[] arrNum = strNum.Split('|'); foreach (string strNumIN in arrNum) { decNumAll += Convert.ToInt32(strNumIN.Split(',')[0].ToString());//截取第零位 } return decNumAll; } // 百分比计算 // <param name="decItem">当前选项本身的票数</param> // <param name="decNumAll">所有的票数</param> public decimal GetPercent(decimal decItem, decimal decNumAll) { if (decNumAll == 0)//如果总票数是零 { decNumAll++;//加一,避免除0出错 } decimal decPercent = decItem / decNumAll; return decPercent; }
於黾 2014-10-30
  • 打赏
  • 举报
回复
引用 4 楼 niunxy 的回复:
[quote=引用 2 楼 Z65443344 的回复:] 你要显示1年的数据,把每天240个点都放上去,首先像素就达不到,根本不会都显示出来,那还放上去干嘛 先做个抽样 此外,计算平均数之类的,先在后台把数据计算好,然后像绑定主K线一样直接绑定上去就好
是这样,显示一年的基本上就是一条线的效果了,但是移动鼠标还是可以看到每个数据点的数据提示的,而且二次开发还会手动画线,这些线是可以看到的,如果不都放上去,很多线就显示不出来了。[/quote] 240*365=87600 你确定每个点都能显示? 按你屏幕分辨率1920算,图标全屏显示 你鼠标放上去,鼠标所在的像素就有4.5个数据,到底显示哪个??怎么可能所有数据都会有显示的
QQ234788028 2014-10-30
  • 打赏
  • 举报
回复
试试看用highcharts会不会快一点呢 http://www.hcharts.cn/demo/index.php
  • 打赏
  • 举报
回复
引用 5 楼 chentaoyql 的回复:
K线图上每个点的数据提示是循环添加的。 <--- 为什么要循环添加,数据绑定不行吗? 系统绘图是很慢的,特别是这种循环绘图(非一次性绘完)
是这样的! 如果看到在程序没有添加完毕所有数据,就开始绘图了,那么一定是错误地使用了控件。 只应该在所有数据添加完毕才看到系统开始绘图,这样的编程才对。
比尔咔咔 2014-10-30
  • 打赏
  • 举报
回复
K线图上每个点的数据提示是循环添加的。 <--- 为什么要循环添加,数据绑定不行吗? 系统绘图是很慢的,特别是这种循环绘图(非一次性绘完)
niunxy 2014-10-30
  • 打赏
  • 举报
回复
引用 2 楼 Z65443344 的回复:
你要显示1年的数据,把每天240个点都放上去,首先像素就达不到,根本不会都显示出来,那还放上去干嘛 先做个抽样 此外,计算平均数之类的,先在后台把数据计算好,然后像绑定主K线一样直接绑定上去就好
是这样,显示一年的基本上就是一条线的效果了,但是移动鼠标还是可以看到每个数据点的数据提示的,而且二次开发还会手动画线,这些线是可以看到的,如果不都放上去,很多线就显示不出来了。
niunxy 2014-10-30
  • 打赏
  • 举报
回复
引用 1 楼 QQ234788028 的回复:
当显示跨度比较大的时候,就显示天, 参考新浪的股票
如果按天为单位显示,有很多数据点就会显示不出来,数据点的数据提示就看不到每个点的了
於黾 2014-10-30
  • 打赏
  • 举报
回复
你要显示1年的数据,把每天240个点都放上去,首先像素就达不到,根本不会都显示出来,那还放上去干嘛 先做个抽样 此外,计算平均数之类的,先在后台把数据计算好,然后像绑定主K线一样直接绑定上去就好
QQ234788028 2014-10-30
  • 打赏
  • 举报
回复
当显示跨度比较大的时候,就显示天, 参考新浪的股票
niunxy 2014-10-30
  • 打赏
  • 举报
回复
引用 8 楼 Z65443344 的回复:
[quote=引用 4 楼 niunxy 的回复:]
[quote=引用 2 楼 Z65443344 的回复:]
你要显示1年的数据,把每天240个点都放上去,首先像素就达不到,根本不会都显示出来,那还放上去干嘛
先做个抽样
此外,计算平均数之类的,先在后台把数据计算好,然后像绑定主K线一样直接绑定上去就好
是这样,显示一年的基本上就是一条线的效果了,但是移动鼠标还是可以看到每个数据点的数据提示的,而且二次开发还会手动画线,这些线是可以看到的,如果不都放上去,很多线就显示不出来了。[/quote]
240*365=87600
你确定每个点都能显示?
按你屏幕分辨率1920算,图标全屏显示
你鼠标放上去,鼠标所在的像素就有4.5个数据,到底显示哪个??怎么可能所有数据都会有显示的[/quote]
,这个图里面橙色的线,如果不是全部显示数据点,里面的线肯定不会全,而这些线才是开发的目的

4,819

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧