网站绘制波形图状的统计图(动态)

时间:2022-02-06 10:24:33
坛友们好,请教一个问题。
目的:就是像图片一样绘制统计图。
需求:1.网页形式;
           2.3000多个点,自动更新,(时间越短越好);
           3.数据从后台提取(ajax);
           4.最好好看一些;
目前我用js插件highcharts的做的(通过ajax定时从后台提取数据,绘制),但是有几个问题:1.刷新不能更快了,一秒钟图形更新3次就是极限了。2.占用的cpu太大了,一直在80%以上。希望坛友给个帮助,用什么解决方案较好,或许用silverlight好?还是用js插件我做的哪里不够好.
网站绘制波形图状的统计图(动态)

14 个解决方案

#1


找个插件就可以了,http://www.highcharts.com/ 这个看看

#2


取数据时关键,不知道你的具体算法是怎样的 网站绘制波形图状的统计图(动态)

#3


引用 2 楼 peak1951 的回复:
取数据时关键,不知道你的具体算法是怎样的 网站绘制波形图状的统计图(动态)

不是啊,我取数据用造数据的方式,random来造数据,用stringbuilder来存储,最后返回一个json类型的字符串。前台进行解析的

#4


首先,3000多个点,你300毫秒就重新取一次?就算是不画图,仅仅通讯,再加上到悲催的asp.net程序速度问题,这几乎是立刻被枪毙的。仅仅一个客户,你几秒去后台计算并取回3000多个点,这已经是不幸了。如果有几百个客户端并行繁忙操作时怎么办?嗯不用办了,早“死”了。

如果真是这类系统,如果不是用来糊弄个别领导的——而是给几百个具体办事人员繁忙操作用的,那么这通常需要设计为一个即时业务通讯系统。例如:
1. 后台仅仅在绝对必要时才主动推送数据给客户端,而不是客户端去轮询。
2. 仅仅推送改变了的数据,而不是全部。
3. 仅仅推送在当前屏幕可见范围内的数据,而不是全部。
4. 仅仅推送根据屏幕设置而抽稀了的数据,而不是详细数据。
5. 实在不行,往往在后台直接推送局部图片到客户端,而不是推送数据然后让前端渲染。 

#5


大多数真正的管理信息系统项目,根本不是asp.net程序员考虑的事情。asp.net主要就是用来做一些非常简单的报告,让美工画点花边、配色的。

#6


引用 4 楼 sp1234 的回复:
首先,3000多个点,你300毫秒就重新取一次?就算是不画图,仅仅通讯,再加上到悲催的asp.net程序速度问题,这几乎是立刻被枪毙的。仅仅一个客户,你几秒去后台计算并取回3000多个点,这已经是不幸了。如果有几百个客户端并行繁忙操作时怎么办?嗯不用办了,早“死”了。

如果真是这类系统,如果不是用来糊弄个别领导的——而是给几百个具体办事人员繁忙操作用的,那么这通常需要设计为一个即时业务通讯系统。例如:
1. 后台仅仅在绝对必要时才主动推送数据给客户端,而不是客户端去轮询。
2. 仅仅推送改变了的数据,而不是全部。
3. 仅仅推送在当前屏幕可见范围内的数据,而不是全部。
4. 仅仅推送根据屏幕设置而抽稀了的数据,而不是详细数据。
5. 实在不行,往往在后台直接推送局部图片到客户端,而不是推送数据然后让前端渲染。 

多谢指点,我所需要的这个系统,不会超过10个用户区访问,一般也就一个两个。是这样的,我想做的是一个监控实时波形图,传感器定时传输实时数据(当然速度很快就传回来了,局域网)。作为局域网的监视端需要用波形图显示实时数据。我看过有集成商做过,但不知道人家用的什么技术。也是浏览器打开的BS系统,一秒更新6帧,速度很快了。

#7


我在考虑,是不是用silverlight,处理速度会比js更快?

#8


引用 7 楼 nealinvip 的回复:
我在考虑,是不是用silverlight,处理速度会比js更快?

你应该考虑一下P哥的意见

重点是:如何减少对DB的访问, 而不是想当然地加快速度。
如果能主动上传数据, 这个比定时访问要强万倍!

#9


数据源是不是每秒都更新?
如果不是应该是数据源更新的时候,往页面推送json。

#10


引用 9 楼 smthgdin 的回复:
数据源是不是每秒都更新?
如果不是应该是数据源更新的时候,往页面推送json。

如何推送呢?是一种什么方式吗?求解。我甚至都不需要查数据库。只是从后台获取数据就行。我们的传感器会通过局域网发送数据,检测端调用api获取这些数据,交给前台页面显示。

#11


引用 5 楼 sp1234 的回复:
大多数真正的管理信息系统项目,根本不是asp.net程序员考虑的事情。asp.net主要就是用来做一些非常简单的报告,让美工画点花边、配色的。
这句话不太苟同,用友的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);  //绘制折线

#13


实时交互试试SignalR: http://signalr.net/

#14


楼主你好,我现在也想实现类似的波形,我找到了代码,可是由于没接触过,只是会看简单的标签,现在我有数据,只是想在网页中显示静态的波形,比如数据是1 2 3 4 5 6 7 8 9 10 ,这种静态的波形怎么做啊

#1


找个插件就可以了,http://www.highcharts.com/ 这个看看

#2


取数据时关键,不知道你的具体算法是怎样的 网站绘制波形图状的统计图(动态)

#3


引用 2 楼 peak1951 的回复:
取数据时关键,不知道你的具体算法是怎样的 网站绘制波形图状的统计图(动态)

不是啊,我取数据用造数据的方式,random来造数据,用stringbuilder来存储,最后返回一个json类型的字符串。前台进行解析的

#4


首先,3000多个点,你300毫秒就重新取一次?就算是不画图,仅仅通讯,再加上到悲催的asp.net程序速度问题,这几乎是立刻被枪毙的。仅仅一个客户,你几秒去后台计算并取回3000多个点,这已经是不幸了。如果有几百个客户端并行繁忙操作时怎么办?嗯不用办了,早“死”了。

如果真是这类系统,如果不是用来糊弄个别领导的——而是给几百个具体办事人员繁忙操作用的,那么这通常需要设计为一个即时业务通讯系统。例如:
1. 后台仅仅在绝对必要时才主动推送数据给客户端,而不是客户端去轮询。
2. 仅仅推送改变了的数据,而不是全部。
3. 仅仅推送在当前屏幕可见范围内的数据,而不是全部。
4. 仅仅推送根据屏幕设置而抽稀了的数据,而不是详细数据。
5. 实在不行,往往在后台直接推送局部图片到客户端,而不是推送数据然后让前端渲染。 

#5


大多数真正的管理信息系统项目,根本不是asp.net程序员考虑的事情。asp.net主要就是用来做一些非常简单的报告,让美工画点花边、配色的。

#6


引用 4 楼 sp1234 的回复:
首先,3000多个点,你300毫秒就重新取一次?就算是不画图,仅仅通讯,再加上到悲催的asp.net程序速度问题,这几乎是立刻被枪毙的。仅仅一个客户,你几秒去后台计算并取回3000多个点,这已经是不幸了。如果有几百个客户端并行繁忙操作时怎么办?嗯不用办了,早“死”了。

如果真是这类系统,如果不是用来糊弄个别领导的——而是给几百个具体办事人员繁忙操作用的,那么这通常需要设计为一个即时业务通讯系统。例如:
1. 后台仅仅在绝对必要时才主动推送数据给客户端,而不是客户端去轮询。
2. 仅仅推送改变了的数据,而不是全部。
3. 仅仅推送在当前屏幕可见范围内的数据,而不是全部。
4. 仅仅推送根据屏幕设置而抽稀了的数据,而不是详细数据。
5. 实在不行,往往在后台直接推送局部图片到客户端,而不是推送数据然后让前端渲染。 

多谢指点,我所需要的这个系统,不会超过10个用户区访问,一般也就一个两个。是这样的,我想做的是一个监控实时波形图,传感器定时传输实时数据(当然速度很快就传回来了,局域网)。作为局域网的监视端需要用波形图显示实时数据。我看过有集成商做过,但不知道人家用的什么技术。也是浏览器打开的BS系统,一秒更新6帧,速度很快了。

#7


我在考虑,是不是用silverlight,处理速度会比js更快?

#8


引用 7 楼 nealinvip 的回复:
我在考虑,是不是用silverlight,处理速度会比js更快?

你应该考虑一下P哥的意见

重点是:如何减少对DB的访问, 而不是想当然地加快速度。
如果能主动上传数据, 这个比定时访问要强万倍!

#9


数据源是不是每秒都更新?
如果不是应该是数据源更新的时候,往页面推送json。

#10


引用 9 楼 smthgdin 的回复:
数据源是不是每秒都更新?
如果不是应该是数据源更新的时候,往页面推送json。

如何推送呢?是一种什么方式吗?求解。我甚至都不需要查数据库。只是从后台获取数据就行。我们的传感器会通过局域网发送数据,检测端调用api获取这些数据,交给前台页面显示。

#11


引用 5 楼 sp1234 的回复:
大多数真正的管理信息系统项目,根本不是asp.net程序员考虑的事情。asp.net主要就是用来做一些非常简单的报告,让美工画点花边、配色的。
这句话不太苟同,用友的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);  //绘制折线

#13


实时交互试试SignalR: http://signalr.net/

#14


楼主你好,我现在也想实现类似的波形,我找到了代码,可是由于没接触过,只是会看简单的标签,现在我有数据,只是想在网页中显示静态的波形,比如数据是1 2 3 4 5 6 7 8 9 10 ,这种静态的波形怎么做啊