我们目前正在使用ZedGraph绘制一些数据的折线图.输入数据来自任意大小的文件,因此,我们事先不知道数据点的最大数量是多少.但是,通过打开文件并读取标题,我们可以找出文件中有多少数据点.
文件格式基本上是[时间(双精度),值(双精度)].但是,条目在时间轴上不一致.在t = 0秒和t = 10秒之间可能没有任何点,但在t = 10秒和t = 11秒之间可能存在100K,依此类推.
例如,我们的测试数据集文件大约为2.6 GB,它有324M点.我们想向用户展示整个图表,让她浏览图表.然而,向ZedGraph加载324M点不仅是不可能的(我们使用的是32位机器),但也没用,因为屏幕上没有这么多点.
使用ZedGraph的FilteredPointList功能似乎也是不可能的,因为这需要先加载整个数据,然后对该数据执行过滤.
因此,除非我们遗漏任何东西,否则我们唯一的解决办法似乎是 - 以某种方式对数据进行抽取,但是当我们不断努力时,我们遇到了很多问题:
1-我们如何抽取未及时到达的数据?
2-由于无法将整个数据加载到内存中,因此任何算法都需要在磁盘上运行,因此需要仔细设计.
3-我们如何处理放大和缩小,尤其是当数据在x轴上不均匀时.
如果数据是统一的,在初始加载图形时,我们可以Seek()通过文件中预定义的条目数量,并选择每N个其他样本并将其提供给ZedGraph.但是,由于数据不统一,我们必须更加智能地选择要显示的样本,并且我们无法提出任何不必读取整个文件的智能算法.
我道歉,因为这个问题没有特别尖锐的特异性,但我希望我能解释一下我们问题的性质和范围.
我们在Windows 32位,.NET 4.0上.
我有一个相对较大的系统(到目前为止约25000行)用于监控无线电相关设备.它使用最新版本的ZedGraph显示图表等.该程序使用Win7上的VS2010上的C#进行编码.问题是:
我希望程序能够快速运行!
解决方案中的每个项目都设置为RELEASE,Debug非托管代码为DISABLED,定义DEBUG和TRACE常量为DISABLED,优化代码 - 我尝试了,警告级别 - 我试过,抑制JIT - 我试过,或者我试过所有StackOverflow上已经提出的解决方案 - 没有成功.程序在分析器外部很慢,在分析器中很快.我不认为问题出在我的代码中,因为如果我将探查器附加到其他不相关的进程中它会变得很快!
请帮忙!我真的需要它在各地快速,因为它是一个关键业务应用程序和性能问题是不能容忍的...
更新1 - 8跟随
-------------------- UPDATE1:--------------------
问题似乎与ZedGraph无关,因为在我用自己的基本绘图替换ZedGraph之后它仍然存在.
-------------------- UPDATE2:--------------------
在虚拟机中运行该程序,该程序仍然运行缓慢,并且从主机运行的探查器不会使它快速.
-------------------- UPDATE3:--------------------
启动屏幕捕获到视频也可以加快程序的速度!
-------------------- UPDATE4:--------------------
如果我打开英特尔图形驱动程序设置窗口(这个东西:http://www.intel.com/support/graphics/sb/img/resolution_new.jpg),只是不断地将光标悬停在按钮上,这样它们就会发光,等等,我的节目加快了!如果我运行GPUz或Kombustor,它不会加速,因此没有GPU上的超频 - 它保持稳定850Mhz.
-------------------- Update5:--------------------
测试不同的机器:
- 在配备Intel HD2000的Core i5-2400S上,UI运行缓慢,CPU使用率约为15%.
- 在配备英特尔G41 Express的同事的Core 2 Duo上,UI运行速度很快,但CPU使用率约为90%(这也不正常)
- 在配备专用Radeon X1650的酷睿i5-2400S上,UI运行速度极快,CPU使用率约为50%.
-------------------- Update6:--------------------
一段代码,显示我如何更新单个图形(graphFFT是ZedGraphControl易于使用的封装):
public void LoopDataRefresh() //executes in a new thread
{
while (true)
{
while (!d.Connected)
Thread.Sleep(1000);
if (IsDisposed)
return; …Run Code Online (Sandbox Code Playgroud) 我正在为我的公司开发一个项目,我需要在研究股票市场的过程中将一些不同类型和平均复杂度的图表集成到C#中.我在互联网上找到了这个免费的图书馆,ZedGraph.如果你碰到它,你推荐使用它吗?它的支持程度如何?
是否可以将数据绘制到ZedGraph图形并将其保存为文件而不显示/生成用户可见的图形?我正在寻找处理大量数据集并生成图表并将其保存到文件中以便在应用程序之外查看.
如果无法做到这一点,是否可以在隐藏/最小化的表单上显示图表,保存图表,关闭窗口,并重复每个图表?
我是ZedGraph的新手.到目前为止,我可以绘制曲线和条形图.如何在不连接的情况下显示点?
我正在使用C#和Windows Forms.
我需要显示几个具有共同X轴和图例的图形.我希望实现的目标显示在图片上.主要目标是在一条线上有几个Y轴,而不是并行.因此,可以显示几条曲线而不相互交叉.
我知道如何显示多个图形,但是每个图形都有自己的图例和Y轴.

我想用鼠标拖动一个正方形来选择曲线上的点.当然我可以自己构建,但我想知道它是否可以更轻松地完成?
是否可以更改zedgraph窗格的背景颜色(默认为白色)?
我尝试更改zedgraph元素的背景颜色,但它没有给出任何可见的结果,背景仍为白色:
ZedGraphControl.BackColor = System.Drawing.Color.Black;
Run Code Online (Sandbox Code Playgroud)
并且似乎没有Color或BackColor属性ZedGraphControl.GraphPane.
情况

我正在使用价格(Y轴)的ZedGraph与时间(X轴)构建图表.持续时间为三年.
目前我正在获得X轴标签:1月11日; 1月12日; 1月13日,一系列数据从2010年3月3日至2013年3月2日.
据我所知,如果轴的类型为DateTime,则这是默认行为.
题
如何更改X轴标签,以便我得到:3月11日; 3月12日; 3月13日?更常见的是,我可以更改用于与数据的开始/结束月份重合的标签.
编辑:
我对这个问题的初步尝试有点模棱两可,所以我只是想澄清一下.
这并不是说我希望标签是dd-MMM-yy - 我想要的是能够控制X轴上标签/抽搐出现的位置.
因此,对于跨越2010年3月3日至2013年3月2日的X轴,而不是始终出现在1月份的标签
如我的屏幕转储中所示,我可以选择标签/ tic出现在哪个月份.因此,对于该数据集,我想在以下标签处添加标签:
我希望更清楚.
c# ×10
zedgraph ×10
.net ×4
charts ×3
graphics ×2
winforms ×2
contextmenu ×1
graph ×1
large-files ×1
performance ×1
profiler ×1