c#怎么处理相对大量的数据?

用winform写的数据分析。数据采集端是一分钟存一次,每次30个开关量,16个模拟量,.data文件。一天一个文件。现在是分析端要针对开关量按时间画条形图,模拟量画曲线。但是绘制图像时如果是显示所有设备的图像时,画完后窗口就发生一下位移,然后再重绘,再移动再重绘。绘图使用一个单独线程的话能消除问题并加速绘图吗?不能的话该怎么做?

绘图完成后窗口发生位移?

我揣测下你的意思就是你要实时的使用一个Chart显示数据,Chart显示数据和你的数据获取是2个概念,造成Chart的数据位移是你传入Chart的数据发生了变化,Ok下面是实现思路:

    Chart:

    1)使用gdi+绘制你要的Chart,Chart内部内置一个Timer,刷新频率开放或者闭合都可以,定义传入的数据接口,就是你要画的条形图的X轴和Y轴数据,这样基本就实现了,一般的Chart还要求有图例,你可以放在左侧或者右侧,

    2)使用第三方的Chart,例如zedgraph(写组件可以参照第三方的,他们功能过于强大,有时候可以借鉴下他的原理、思路,设计个符合自己公司业务需求可拓展的组件)

   2.数据动态变化,就是根据你上位中采集数据的变化拆装成Chart中的数据对象,原始数据变化了,图形绘画自然会变。

追问

数据采集和分析不是同步的,分析的是历史数据。想用chart但是死活没导进去,我是用panel自己写算法画的。来回晃动重绘是在点击按钮后程序自己出现的。猜测可能是内存不足?!

追答

1.我弱弱的问一句:你这数据采集,没有数据存储吗,为什么跟上位显示混在一块,数据采集我认为是一个程序的后台服务(即job),你前台从数据端拿数据,运算和数据采集都是在后台做,怎么会内存不够,囧

追问

数据采集存的data格式。你说的存储是数据库?上位显示是byte流读取然后整理格式存数组。内存不够是我猜的······现在都4g内存我也不知道怎么回事。而且采集是一个机器,分析是另一个机器

追答

“采集是一个机器,分析是另一个机器”这设计是对的,我困惑了:上位显示是byte流读取然后整理格式存数组?一般选择数据库存成二进制一般是文件存储或者数组干这个转换的,你的数据模型数据总量很固定,这样的设计不科学啊,算了,没看到Design不纠结了。
你显示在Chart上的数据来源于来哪里?你的Client上位显示会参与到分析?分析应该是上位的Service去做的。
最后说一下画图吧,数据的绘制跟你Chart使用是2条线,不是你晃了再画,这样太考虑性能了,你这就是个定时获取数据的,完全可以获取Chart绘制使用的数据数组,查询最后一笔数据对象时间到现在的数据,在组装拼接,Chart绘制使用的数据集合都是简单类型,就2个字段一个时间一个数据,这内存会爆?很不可思议。

追问

关于内存,是我猜的猜的猜的猜的猜的猜的猜的····orz
那个晃了再画,不是我写的,是程序的问题·····绘图是我自己写的算法,画在panel上。这个就是跟查话费的程序功能类似,需要查就运行一下。
上位显示我没说全。是整理格式保存数组后,作为数据源,绘图。上位需要显示的只有图
至于design,我不知道该怎么设计。毕业不久,自己鼓捣的不知道怎么弄了
二进制文件适合文件存储,不适合这种需要分析的数据存储?

追答

有点佩服你,你自己弄二进制存储,你这检索效率可以从头开发,我觉得你完全有前途可以写个小型的数据库,牛人就是你这样锻造出来的。
绘图我的理解你是在程序中显示的时候现弄的,而不是写成一个组件,你这怪不得出现如此多幺蛾子事件,强烈要求你封装成组件。

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-07-23
没明白你什么意思,你不能一次读出所有数据,然后统一绘制吗(随便一个绘图控件都可以做这个,自己用GDI画也是可以的),为什么要逐个绘图追问

是统一绘制,是程序自己来回晃动重绘,导致软件没法用

追答

多半是你写的算法有问题,你可以先在后台创建画布,在上面画好后再显示出来,或者就直接用ZedGraph这样的控件

追问

好主意,我试试

第2个回答  2018-07-11
你不知道世界上做大量数据分析最好的、最成熟的、免费的 python 吗??、

c#datatable怎么处理千万级数据
1、首先将大数据分成多个小数据块进行处理,可以减少内存占用和加快处理速度。可以使用DataTable的Select方法进行分页查询。2、其次对于需要耗费大量时间的操作,可以使用异步处理来避免阻塞主线程,提高程序的响应速度。3、最后对于数据量较大的表格,可以使用压缩算法对数据进行压缩,以减少内存占用。

C# 在调用大量数据时怎么优化好,一次调用十万以上的数据记录?
1、数据库优化方法:使用存储过程、索引 2、如果是winfrom 可以使用异步读取数据控件backgroundWorker1,可以避免界面出现假死状态 3、如果是ASP.NET,可以使用JQUERY异步加载

C#程序处理上百万上千万数据时,都有什么方法?越详细越好。数据库和程序...
在应用层面, 必须要将上千万的数据载入内存使用的情况, 根据不同的应用目的, 可以采用memcached或mongoDB这样的采用对象集合实现的非关系型数据库系统. 千万行数据的规模, 也能够提供毫秒级的存取.在数据库层面, 为提高性能将数据分割是比较常用的手段. 根据不同的情况, 使用日期, 应用主体等等维度来分...

c# 温度获取存入数据库,数据大量怎么处理问题
1、这个数据量并不算什么大数据量,就以我们平时看到的bbs来说,几千万的数据都正常,用的还是普通的mysql。2、如果你是一次读出100万数据,这个其实是没什么意义的,人的眼睛没那高的分辨率,10万数据跟100万在人肉看来没啥差别的,所以你可以限定一个取值的上限,比如最大5万,另外比如说你要在一...

c#排序,且数据量很大。大概500万。
标准的做法是把需要查询的那部分数据插入数据库。然后再利用数据库的查询功能进行操作。排序算法很多,需要很多更详细的资料才能判断哪个算法更有利。下面的链接有各种算法的优劣比较,和例子。(原来的链接在百度居然通不过)参考资料:http:\/\/hi.baidu.com\/sppeivan\/blog\/item\/855c68df5fa6605994ee3722...

C#如何在海量数据下的高效读取写入MySQL
主要开发语言是C#,数据库使用的是MySQL。最常见的操作便是 select 读取数据,然后在C#中对数据进行处理, 完毕后再插入数据库中。 简而言之就 select -> process -> insert三个步骤。 对于数据量小的情况下(百万级别 or 几百兆)可能最多1个小时就处理完了。但是对于千万级数据可能几天,甚至更多...

c#怎么处理相对大量的数据?
你可以放在左侧或者右侧,2)使用第三方的Chart,例如zedgraph(写组件可以参照第三方的,他们功能过于强大,有时候可以借鉴下他的原理、思路,设计个符合自己公司业务需求可拓展的组件)2.数据动态变化,就是根据你上位中采集数据的变化拆装成Chart中的数据对象,原始数据变化了,图形绘画自然会变。

求C# Socket传输大量数据解决办法??
你可以使用异步多线程,在SOCKET发送参数中设定数据大小。优化转码程序。对于TCP连接的丢包,你选择适合你们网络的协议,可能是你的程序对数据的处理有问题。可以参考迅雷的各项技术。

c#中往mysql里批量插入上万条数据,有比较高效的方法吗
首先, 插入上万条数据,对于数据库来说并不是“很大”的工作量,一般配置的笔记本电脑都可以在1分钟内完成。 所以最简单、最灵活的办法还是写SQL语句。如果不希望DB编译器每次执行都编译SQL的话,可以使用存储过程,直接调用,性能上会好很多。也比较简单。(几万条数据怎么地也得要时间去处理,所以不...

C#读取大数据量Excel,60W行数据,该怎么处理
第一遍看时可以不必太钻牛角尖,不懂的就跳过去,把难点标记出来。第二遍看,阅读重点是之前的标记出来的难点,实践重点是是结合动手编写书上的例题,并参考例子做课后习题,多花时间去理解例子。第三遍时,尽量凭自己掌握的知识和对例子的理解参透来编写自己的程序 ...

相似回答