目的:就是像图片一样绘制统计图。
需求:1.网页形式;
2.3000多个点,自动更新,(时间越短越好);
3.数据从后台提取(ajax);
4.最好好看一些;
目前我用js插件highcharts的做的(通过ajax定时从后台提取数据,绘制),但是有几个问题:1.刷新不能更快了,一秒钟图形更新3次就是极限了。2.占用的cpu太大了,一直在80%以上。希望坛友给个帮助,用什么解决方案较好,或许用silverlight好?还是用js插件我做的哪里不够好.
14 个解决方案
#1
找个插件就可以了,http://www.highcharts.com/ 这个看看
#3
不是啊,我取数据用造数据的方式,random来造数据,用stringbuilder来存储,最后返回一个json类型的字符串。前台进行解析的
#4
首先,3000多个点,你300毫秒就重新取一次?就算是不画图,仅仅通讯,再加上到悲催的asp.net程序速度问题,这几乎是立刻被枪毙的。仅仅一个客户,你几秒去后台计算并取回3000多个点,这已经是不幸了。如果有几百个客户端并行繁忙操作时怎么办?嗯不用办了,早“死”了。
如果真是这类系统,如果不是用来糊弄个别领导的——而是给几百个具体办事人员繁忙操作用的,那么这通常需要设计为一个即时业务通讯系统。例如:
1. 后台仅仅在绝对必要时才主动推送数据给客户端,而不是客户端去轮询。
2. 仅仅推送改变了的数据,而不是全部。
3. 仅仅推送在当前屏幕可见范围内的数据,而不是全部。
4. 仅仅推送根据屏幕设置而抽稀了的数据,而不是详细数据。
5. 实在不行,往往在后台直接推送局部图片到客户端,而不是推送数据然后让前端渲染。
如果真是这类系统,如果不是用来糊弄个别领导的——而是给几百个具体办事人员繁忙操作用的,那么这通常需要设计为一个即时业务通讯系统。例如:
1. 后台仅仅在绝对必要时才主动推送数据给客户端,而不是客户端去轮询。
2. 仅仅推送改变了的数据,而不是全部。
3. 仅仅推送在当前屏幕可见范围内的数据,而不是全部。
4. 仅仅推送根据屏幕设置而抽稀了的数据,而不是详细数据。
5. 实在不行,往往在后台直接推送局部图片到客户端,而不是推送数据然后让前端渲染。
#5
大多数真正的管理信息系统项目,根本不是asp.net程序员考虑的事情。asp.net主要就是用来做一些非常简单的报告,让美工画点花边、配色的。
#6
多谢指点,我所需要的这个系统,不会超过10个用户区访问,一般也就一个两个。是这样的,我想做的是一个监控实时波形图,传感器定时传输实时数据(当然速度很快就传回来了,局域网)。作为局域网的监视端需要用波形图显示实时数据。我看过有集成商做过,但不知道人家用的什么技术。也是浏览器打开的BS系统,一秒更新6帧,速度很快了。
#7
我在考虑,是不是用silverlight,处理速度会比js更快?
#8
你应该考虑一下P哥的意见
重点是:如何减少对DB的访问, 而不是想当然地加快速度。
如果能主动上传数据, 这个比定时访问要强万倍!
#9
数据源是不是每秒都更新?
如果不是应该是数据源更新的时候,往页面推送json。
如果不是应该是数据源更新的时候,往页面推送json。
#10
如何推送呢?是一种什么方式吗?求解。我甚至都不需要查数据库。只是从后台获取数据就行。我们的传感器会通过局域网发送数据,检测端调用api获取这些数据,交给前台页面显示。
#11
这句话不太苟同,用友的U9 ERP系统就是基于.NET平台
#12
分析商品走势图
int[] Count = new int[12];
string cmdtxt2 = "SELECT * FROM tb_Ware WHERE ID=" + ID + "";
SqlCommand Com1 = new SqlCommand(cmdtxt2, Con);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = Com1;
DataSet ds = new DataSet();
da.Fill(ds);
int j = 0;
for(j=0;j<12;j++)
{
Count[j] = Convert.ToInt32(ds.Tables[0].Rows[0][j+2].ToString()) *26/ 500 ;
}
//显示折线效果
SolidBrush mybrush = new SolidBrush(Color.Red);
Point[] points = new Point[12];
points[0].X = 60; points[0].Y = 340 - Count[0];
points[1].X = 100; points[1].Y = 340 - Count[1];
points[2].X = 140; points[2].Y = 340 - Count[2];
points[3].X = 180; points[3].Y = 340 - Count[3];
points[4].X = 220; points[4].Y = 340 - Count[4];
points[5].X = 260; points[5].Y = 340 - Count[5];
points[6].X = 300; points[6].Y = 340 - Count[6];
points[7].X = 340; points[7].Y = 340 - Count[7];
points[8].X = 380; points[8].Y = 340 - Count[8];
points[9].X = 420; points[9].Y = 340 - Count[9];
points[10].X = 460; points[10].Y = 340 - Count[10];
points[11].X = 500; points[11].Y = 340 - Count[11];
g.DrawLines(mypen2, points); //绘制折线
int[] Count = new int[12];
string cmdtxt2 = "SELECT * FROM tb_Ware WHERE ID=" + ID + "";
SqlCommand Com1 = new SqlCommand(cmdtxt2, Con);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = Com1;
DataSet ds = new DataSet();
da.Fill(ds);
int j = 0;
for(j=0;j<12;j++)
{
Count[j] = Convert.ToInt32(ds.Tables[0].Rows[0][j+2].ToString()) *26/ 500 ;
}
//显示折线效果
SolidBrush mybrush = new SolidBrush(Color.Red);
Point[] points = new Point[12];
points[0].X = 60; points[0].Y = 340 - Count[0];
points[1].X = 100; points[1].Y = 340 - Count[1];
points[2].X = 140; points[2].Y = 340 - Count[2];
points[3].X = 180; points[3].Y = 340 - Count[3];
points[4].X = 220; points[4].Y = 340 - Count[4];
points[5].X = 260; points[5].Y = 340 - Count[5];
points[6].X = 300; points[6].Y = 340 - Count[6];
points[7].X = 340; points[7].Y = 340 - Count[7];
points[8].X = 380; points[8].Y = 340 - Count[8];
points[9].X = 420; points[9].Y = 340 - Count[9];
points[10].X = 460; points[10].Y = 340 - Count[10];
points[11].X = 500; points[11].Y = 340 - Count[11];
g.DrawLines(mypen2, points); //绘制折线
#14
楼主你好,我现在也想实现类似的波形,我找到了代码,可是由于没接触过,只是会看简单的标签,现在我有数据,只是想在网页中显示静态的波形,比如数据是1 2 3 4 5 6 7 8 9 10 ,这种静态的波形怎么做啊
#1
找个插件就可以了,http://www.highcharts.com/ 这个看看
#2
#3
不是啊,我取数据用造数据的方式,random来造数据,用stringbuilder来存储,最后返回一个json类型的字符串。前台进行解析的
#4
首先,3000多个点,你300毫秒就重新取一次?就算是不画图,仅仅通讯,再加上到悲催的asp.net程序速度问题,这几乎是立刻被枪毙的。仅仅一个客户,你几秒去后台计算并取回3000多个点,这已经是不幸了。如果有几百个客户端并行繁忙操作时怎么办?嗯不用办了,早“死”了。
如果真是这类系统,如果不是用来糊弄个别领导的——而是给几百个具体办事人员繁忙操作用的,那么这通常需要设计为一个即时业务通讯系统。例如:
1. 后台仅仅在绝对必要时才主动推送数据给客户端,而不是客户端去轮询。
2. 仅仅推送改变了的数据,而不是全部。
3. 仅仅推送在当前屏幕可见范围内的数据,而不是全部。
4. 仅仅推送根据屏幕设置而抽稀了的数据,而不是详细数据。
5. 实在不行,往往在后台直接推送局部图片到客户端,而不是推送数据然后让前端渲染。
如果真是这类系统,如果不是用来糊弄个别领导的——而是给几百个具体办事人员繁忙操作用的,那么这通常需要设计为一个即时业务通讯系统。例如:
1. 后台仅仅在绝对必要时才主动推送数据给客户端,而不是客户端去轮询。
2. 仅仅推送改变了的数据,而不是全部。
3. 仅仅推送在当前屏幕可见范围内的数据,而不是全部。
4. 仅仅推送根据屏幕设置而抽稀了的数据,而不是详细数据。
5. 实在不行,往往在后台直接推送局部图片到客户端,而不是推送数据然后让前端渲染。
#5
大多数真正的管理信息系统项目,根本不是asp.net程序员考虑的事情。asp.net主要就是用来做一些非常简单的报告,让美工画点花边、配色的。
#6
多谢指点,我所需要的这个系统,不会超过10个用户区访问,一般也就一个两个。是这样的,我想做的是一个监控实时波形图,传感器定时传输实时数据(当然速度很快就传回来了,局域网)。作为局域网的监视端需要用波形图显示实时数据。我看过有集成商做过,但不知道人家用的什么技术。也是浏览器打开的BS系统,一秒更新6帧,速度很快了。
#7
我在考虑,是不是用silverlight,处理速度会比js更快?
#8
你应该考虑一下P哥的意见
重点是:如何减少对DB的访问, 而不是想当然地加快速度。
如果能主动上传数据, 这个比定时访问要强万倍!
#9
数据源是不是每秒都更新?
如果不是应该是数据源更新的时候,往页面推送json。
如果不是应该是数据源更新的时候,往页面推送json。
#10
如何推送呢?是一种什么方式吗?求解。我甚至都不需要查数据库。只是从后台获取数据就行。我们的传感器会通过局域网发送数据,检测端调用api获取这些数据,交给前台页面显示。
#11
这句话不太苟同,用友的U9 ERP系统就是基于.NET平台
#12
分析商品走势图
int[] Count = new int[12];
string cmdtxt2 = "SELECT * FROM tb_Ware WHERE ID=" + ID + "";
SqlCommand Com1 = new SqlCommand(cmdtxt2, Con);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = Com1;
DataSet ds = new DataSet();
da.Fill(ds);
int j = 0;
for(j=0;j<12;j++)
{
Count[j] = Convert.ToInt32(ds.Tables[0].Rows[0][j+2].ToString()) *26/ 500 ;
}
//显示折线效果
SolidBrush mybrush = new SolidBrush(Color.Red);
Point[] points = new Point[12];
points[0].X = 60; points[0].Y = 340 - Count[0];
points[1].X = 100; points[1].Y = 340 - Count[1];
points[2].X = 140; points[2].Y = 340 - Count[2];
points[3].X = 180; points[3].Y = 340 - Count[3];
points[4].X = 220; points[4].Y = 340 - Count[4];
points[5].X = 260; points[5].Y = 340 - Count[5];
points[6].X = 300; points[6].Y = 340 - Count[6];
points[7].X = 340; points[7].Y = 340 - Count[7];
points[8].X = 380; points[8].Y = 340 - Count[8];
points[9].X = 420; points[9].Y = 340 - Count[9];
points[10].X = 460; points[10].Y = 340 - Count[10];
points[11].X = 500; points[11].Y = 340 - Count[11];
g.DrawLines(mypen2, points); //绘制折线
int[] Count = new int[12];
string cmdtxt2 = "SELECT * FROM tb_Ware WHERE ID=" + ID + "";
SqlCommand Com1 = new SqlCommand(cmdtxt2, Con);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = Com1;
DataSet ds = new DataSet();
da.Fill(ds);
int j = 0;
for(j=0;j<12;j++)
{
Count[j] = Convert.ToInt32(ds.Tables[0].Rows[0][j+2].ToString()) *26/ 500 ;
}
//显示折线效果
SolidBrush mybrush = new SolidBrush(Color.Red);
Point[] points = new Point[12];
points[0].X = 60; points[0].Y = 340 - Count[0];
points[1].X = 100; points[1].Y = 340 - Count[1];
points[2].X = 140; points[2].Y = 340 - Count[2];
points[3].X = 180; points[3].Y = 340 - Count[3];
points[4].X = 220; points[4].Y = 340 - Count[4];
points[5].X = 260; points[5].Y = 340 - Count[5];
points[6].X = 300; points[6].Y = 340 - Count[6];
points[7].X = 340; points[7].Y = 340 - Count[7];
points[8].X = 380; points[8].Y = 340 - Count[8];
points[9].X = 420; points[9].Y = 340 - Count[9];
points[10].X = 460; points[10].Y = 340 - Count[10];
points[11].X = 500; points[11].Y = 340 - Count[11];
g.DrawLines(mypen2, points); //绘制折线
#13
实时交互试试SignalR:
http://signalr.net/
#14
楼主你好,我现在也想实现类似的波形,我找到了代码,可是由于没接触过,只是会看简单的标签,现在我有数据,只是想在网页中显示静态的波形,比如数据是1 2 3 4 5 6 7 8 9 10 ,这种静态的波形怎么做啊