请教一个数据处理方式、请围观

猿说编程 2014-09-11 12:28:43
我在做一个直播软件,有一个问题一直被困扰: 就是如果碰到网速比较卡的情况下,关闭程序时,缓存中还有很多数据,比如:我录制了60秒的视频,推到服务器上的只有20s的数据,剩余40s的数据还在缓冲中,可能关闭程序时需要等待10s。。感觉清理缓存的时间长了点。。。

我觉得可能是我自己数据的处理方式有问题,我数据的处理方式如下:

1.首先接受数据,new一个内存并存入链表(这个也是缓存比较大的原因)-----------
2.在发送时找到相应的节点,发送后删除节点
3.程序关闭,删除链表。

如果网速比较卡的情况下,第三部比较耗时!各位大神有什么好的处理方式,都提一提。。
...全文
261 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
超级能量泡泡 2014-09-16
  • 打赏
  • 举报
回复
最好的方案还是搞个守护进程,专门负责缓冲以及和服务器交互。本地APP只复杂把数据(其实就是个本地磁盘文件)提交给这个守护进程,然后关闭本地APP就无所谓了。
超级能量泡泡 2014-09-16
  • 打赏
  • 举报
回复
链表结构? 你是不是应该构建一个基于连续存储空间的链表,专门作为buffer呢? 否则的话在析构的时候是很慢的。
xiaohuh421 2014-09-12
  • 打赏
  • 举报
回复
你的数据处理方式有问题. 应该有一个处理速度自动平衡. 当网络较差时, 应该以一定的策略来降低数据采集速度, 让缓冲区保持一个最大量, 不能无限增长. 你想想, 网络只能发送一个字节, 你却还要是让它发送1G的数据, 你觉得你的缓冲区还够吗.
猿说编程 2014-09-11
  • 打赏
  • 举报
回复
引用 11 楼 zengraoli 的回复:
[quote=引用 9 楼 ZhaDeNianQu 的回复:] [quote=引用 8 楼 zengraoli 的回复:] [quote=引用 5 楼 ZhaDeNianQu 的回复:] [quote=引用 2 楼 zengraoli 的回复:] 用stl容器吧 程序关闭,删除链表,这不是应该放在服务器上面操作的么?
这个是在清理我自己的缓存。。跟服务器无关的。。[/quote] 如果没有放在服务器,不清空会如何?flashplayer也不见得会去清理缓存[/quote] 客户端会有很多内存泄漏。。。。。用户电脑会越用越卡[/quote] 那就不用链表 用stl容器[/quote] 比如:? list是不是会快一点?
snake_xiongyang 2014-09-11
  • 打赏
  • 举报
回复
另外 现在操作系统 会释放你“泻露”的内存的。 你的应用程序所有的内存系统都帮你记着呢,只要你程序退出,不管你有没有自己释放,系统都会释放出来的 所以,不会越来越卡的
snake_xiongyang 2014-09-11
  • 打赏
  • 举报
回复
第三部分没有道理耗时很多 如果仅仅是delete的话,至少不应该达到要10秒这个级别 你得查下原因,我觉得你肯定在第3步干了别的耗时的操作 比如每个内存加一个互斥量,保证在正在读写的时候不会删掉,然后你的删除动作其实被网络IO block了 如果是这种情况,你应该关socket 或者停止IO线程
  • 打赏
  • 举报
回复
引用 9 楼 ZhaDeNianQu 的回复:
[quote=引用 8 楼 zengraoli 的回复:] [quote=引用 5 楼 ZhaDeNianQu 的回复:] [quote=引用 2 楼 zengraoli 的回复:] 用stl容器吧 程序关闭,删除链表,这不是应该放在服务器上面操作的么?
这个是在清理我自己的缓存。。跟服务器无关的。。[/quote] 如果没有放在服务器,不清空会如何?flashplayer也不见得会去清理缓存[/quote] 客户端会有很多内存泄漏。。。。。用户电脑会越用越卡[/quote] 那就不用链表 用stl容器
赵4老师 2014-09-11
  • 打赏
  • 举报
回复
引用 4 楼 ZhaDeNianQu 的回复:
[quote=引用 1 楼 zhao4zhong1 的回复:] 不要企图优雅的结束(因为这是不可能办到的) 而要在烂的不能再烂的摊子上也能重整河山! http://bbs.csdn.net/topics/390787357
看了你的连接。。。不明觉厉!! 而要在烂的不能再烂的摊子上也能重整河山! 是指的神马。。[/quote] 不要企图优雅的结束。 比如进程退出前干点什么,注销/重启前干点什么,关机前干点什么(因为这是不可能办到的。停电、火山爆发、龙卷风、地震、海啸、洪水、核辐射、战争、失联、……) 而要在烂的不能再烂的摊子上也能重整河山! 比如灾后重建的一切硬件准备都完成了,但你的软件却因上次意外退出留下来的垃圾数据或旧数据请求而无法开始正常工作并处理当前最新的数据请求。
猿说编程 2014-09-11
  • 打赏
  • 举报
回复
引用 8 楼 zengraoli 的回复:
[quote=引用 5 楼 ZhaDeNianQu 的回复:] [quote=引用 2 楼 zengraoli 的回复:] 用stl容器吧 程序关闭,删除链表,这不是应该放在服务器上面操作的么?
这个是在清理我自己的缓存。。跟服务器无关的。。[/quote] 如果没有放在服务器,不清空会如何?flashplayer也不见得会去清理缓存[/quote] 客户端会有很多内存泄漏。。。。。用户电脑会越用越卡
  • 打赏
  • 举报
回复
引用 5 楼 ZhaDeNianQu 的回复:
[quote=引用 2 楼 zengraoli 的回复:] 用stl容器吧 程序关闭,删除链表,这不是应该放在服务器上面操作的么?
这个是在清理我自己的缓存。。跟服务器无关的。。[/quote] 如果没有放在服务器,不清空会如何?flashplayer也不见得会去清理缓存
猿说编程 2014-09-11
  • 打赏
  • 举报
回复
引用 6 楼 lovesmiles 的回复:
[quote=引用 5 楼 ZhaDeNianQu 的回复:] [quote=引用 2 楼 zengraoli 的回复:] 用stl容器吧 程序关闭,删除链表,这不是应该放在服务器上面操作的么?
这个是在清理我自己的缓存。。跟服务器无关的。。[/quote] 清理缓存和网络有什么关系?即使没有网络应该也能快速清理掉才对。[/quote] 这中间存在一个网络延迟问题。。。打个比方,如果你网络足够好,录制1分钟可以推55s的数据到服务器,如果网络不好就会有延时,1分钟有可能只推了20S的数据。。。。这就影响到了缓存大小的问题。。缓存数据量越大,需要清理的时间就越久
勤奋的小游侠 2014-09-11
  • 打赏
  • 举报
回复
引用 5 楼 ZhaDeNianQu 的回复:
[quote=引用 2 楼 zengraoli 的回复:] 用stl容器吧 程序关闭,删除链表,这不是应该放在服务器上面操作的么?
这个是在清理我自己的缓存。。跟服务器无关的。。[/quote] 清理缓存和网络有什么关系?即使没有网络应该也能快速清理掉才对。
猿说编程 2014-09-11
  • 打赏
  • 举报
回复
引用 2 楼 zengraoli 的回复:
用stl容器吧 程序关闭,删除链表,这不是应该放在服务器上面操作的么?
这个是在清理我自己的缓存。。跟服务器无关的。。
猿说编程 2014-09-11
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
不要企图优雅的结束(因为这是不可能办到的) 而要在烂的不能再烂的摊子上也能重整河山! http://bbs.csdn.net/topics/390787357
看了你的连接。。。不明觉厉!! 而要在烂的不能再烂的摊子上也能重整河山! 是指的神马。。
白衣如花 2014-09-11
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
不要企图优雅的结束(因为这是不可能办到的) 而要在烂的不能再烂的摊子上也能重整河山! http://bbs.csdn.net/topics/390787357
不能企图优雅的结束?是不是主张析构的时候不要做太多操作啊
  • 打赏
  • 举报
回复
用stl容器吧 程序关闭,删除链表,这不是应该放在服务器上面操作的么?
赵4老师 2014-09-11
  • 打赏
  • 举报
回复
不要企图优雅的结束(因为这是不可能办到的) 而要在烂的不能再烂的摊子上也能重整河山! http://bbs.csdn.net/topics/390787357

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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