C#大数据处理

E次奥 2013-10-14 10:06:21

有几百兆的二进制数据,我想把他们导入程序中绘制成图形;

假如我每次导入1K数据,绘制成图。我鼠标拖动观察的时候,怎么让观察到一半的时候,继续缓冲加载后边的数据!

...全文
1075 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuchunlei11 2014-05-27
  • 打赏
  • 举报
回复
同求,望大神指点
E次奥 2013-10-16
  • 打赏
  • 举报
回复
引用 24 楼 caozhy 的回复:
[quote=引用 23 楼 porenasckx 的回复:] [quote=引用 9 楼 caozhy 的回复:] 开一个线程,双缓冲,分批加载
我想问下,如何判断在滚动条到达指定的位置时继续加载。 我想让内存中只保存需要显示的一部分数据。[/quote] 这个问题分为两方面,一个是显示的部分,按需显示。 另外一个就是你需要根据坐标建立一个数据结构,比如根据坐标做hash,保证可以快速检索到指定范围的数据,而不是每次都要全部搜索一遍。 [/quote] 你说的有点深奥了我理解不了。 我现在每次异步读取固定长度的数据,然后绘制成图,滚动条左右拖动可以观察,我想让滚动条拖动到大于导入内容的80%的时候继续异步读取。。。。依次类推,每到大于80%的时候异步读取。但是我不知道怎么判断是否大于80%;我现在的滚动条最大值是文件的长度!
threenewbee 2013-10-16
  • 打赏
  • 举报
回复
引用 23 楼 porenasckx 的回复:
[quote=引用 9 楼 caozhy 的回复:] 开一个线程,双缓冲,分批加载
我想问下,如何判断在滚动条到达指定的位置时继续加载。 我想让内存中只保存需要显示的一部分数据。[/quote] 这个问题分为两方面,一个是显示的部分,按需显示。 另外一个就是你需要根据坐标建立一个数据结构,比如根据坐标做hash,保证可以快速检索到指定范围的数据,而不是每次都要全部搜索一遍。
E次奥 2013-10-16
  • 打赏
  • 举报
回复
引用 9 楼 caozhy 的回复:
开一个线程,双缓冲,分批加载
我想问下,如何判断在滚动条到达指定的位置时继续加载。 我想让内存中只保存需要显示的一部分数据。
E次奥 2013-10-15
  • 打赏
  • 举报
回复
我的数据时二进制文件。谁有类似的Demo啊!感谢了!
E次奥 2013-10-15
  • 打赏
  • 举报
回复
引用 18 楼 lorl2 的回复:
楼主还不明白的话,可以找做音视频处理的兄弟请教。
对,就是和视频和音频处理很相似的。
E次奥 2013-10-14
  • 打赏
  • 举报
回复
看了各位的解答后,我想问下: 我先导入1K,拖动到一半后台线程加载后那我程序怎么把以前加载的释放掉。 只加载新导入的内容!
threenewbee 2013-10-14
  • 打赏
  • 举报
回复
引用 8 楼 sbwwkmyd 的回复:
实在看不出楼主的需求与MemoryMappedFile有什么关联
我也没看出来。有些回答是瞎灌水的。反正闲着没事,进入一个问题,一看有个高等级的用户回答了问题,于是复制粘贴,或者鹦鹉学舌下。
threenewbee 2013-10-14
  • 打赏
  • 举报
回复
开一个线程,双缓冲,分批加载
showjim 2013-10-14
  • 打赏
  • 举报
回复
实在看不出楼主的需求与MemoryMappedFile有什么关联
mycjzlove 2013-10-14
  • 打赏
  • 举报
回复
MemoryMappedFile+1
kiba518 2013-10-14
  • 打赏
  • 举报
回复
用并发的线程做 非常快
sj490790083 2013-10-14
  • 打赏
  • 举报
回复
MemoryMappedFile+1
人生导师 2013-10-14
  • 打赏
  • 举报
回复
使用缓存机制的机制,你读取二进制不是直接从文件中读取的,中间加一个缓存,即设置一个字节数组,把文件中二进制数据写到这个字节数组中,然后程序每次读取都从这个缓存读取字节,用后台线程往这个缓存中写数据
申江渔夫 2013-10-14
  • 打赏
  • 举报
回复
BackgroundWorker
gomoku 2013-10-14
  • 打赏
  • 举报
回复
一个比较简单的方法是使用MemoryMappedFile(内存映射,http://msdn.microsoft.com/zh-cn/library/system.io.memorymappedfiles.memorymappedfile(v=vs.100).aspx)。 好处是免费使用了操作系统缓存机制。 坏处是不容易重写到Linux等。
bdmh 2013-10-14
  • 打赏
  • 举报
回复
后台线程读取数据
lorl2 2013-10-14
  • 打赏
  • 举报
回复
楼主还不明白的话,可以找做音视频处理的兄弟请教。
lorl2 2013-10-14
  • 打赏
  • 举报
回复
做内存缓冲区。 缓冲设计为一段数据区域,通过预先将需要从文件读取的数据,先行读取进来预处理好。用专门的线程负责往这个缓冲区填充数据。 主逻辑线程需要数据的时候直接从这个缓冲拿。拿了之后,给缓冲线程一个信号。这样主逻辑线程就可以直接从内存拿数据去处理。后台缓冲线程就不停装载数据。
showjim 2013-10-14
  • 打赏
  • 举报
回复
引用 13 楼 gomoku 的回复:
内存映射是虚拟内存的一种运用技术。 优点之一在于映射的内容可以延迟读取。内存映射建立在VMM(虚拟内存管理器)之上。VMM保证对还没有读取的内容进行加载(以一个页面4K为单位)。内核支持和4K页面意味快速读取和有效的缓存。 优点之二在于,如果内存紧张,VMM可以自动释放加载过的缓存。 其他优点还包括,大文件支持,使用方便等。 进一步可阅读(英文):http://msdn.microsoft.com/zh-cn/library/ms810613.aspx 下面的代码示范使用MemoryMappedFile来进行绘图(需DotNet4.0),示范数据为300兆的数据:
首先,我无法确定楼主说的数据源是不是文件。 其次,我觉得楼主需要的是多线程,而不是实时加载数据。 再次,恕我愚昧,我实在无法理解MemoryMappedFile在楼主的需求中相对于FileStream有什么优点。
加载更多回复(3)

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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