大家讨论下如何提高程序效率

天-笑 2012-11-17 10:24:56
我这边有个应用程序,监听来自各个采集单元的数据,当收到数据后,实例化一个线程处理该数据。
采集的数据,都是插入或者更新同一数据库同一张表。如何提高这个程序的效率呢????

我现在的想法是接收到数据后,压在内存里,当达到一定数量后 统一入库,但是这样怕服务器出异常后,
内存数据丢失。

大家有没好办法,又不丢数据,处理效率又高????????
...全文
247 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
天-笑 2012-11-20
  • 打赏
  • 举报
回复
引用 9 楼 sp1234 的回复:
引用 楼主 shmilywcd 的回复: 我这边有个应用程序,监听来自各个采集单元的数据,当收到数据后,实例化一个线程处理该数据。 采集的数据,都是插入或者更新同一数据库同一张表。如何提高这个程序的效率呢???? 我现在的想法是接收到数据后,压在内存里,当达到一定数量后 统一入库,但是这样怕服务器出异常后, 内存数据丢失。 大家有没好办法,又不丢数据,处理效率又高????????……
大侠,能说具体点吗? 大概是怎么实现的
XBodhi. 2012-11-20
  • 打赏
  • 举报
回复
推荐你用 MessageQuqe 详细队列来处理你的问题。
rayyu1989 2012-11-20
  • 打赏
  • 举报
回复
不要单独创建线程 除非你有上限智能控制 否则使用进程池自动管理
  • 打赏
  • 举报
回复
引用 楼主 shmilywcd 的回复:
我这边有个应用程序,监听来自各个采集单元的数据,当收到数据后,实例化一个线程处理该数据。 采集的数据,都是插入或者更新同一数据库同一张表。如何提高这个程序的效率呢???? 我现在的想法是接收到数据后,压在内存里,当达到一定数量后 统一入库,但是这样怕服务器出异常后, 内存数据丢失。 大家有没好办法,又不丢数据,处理效率又高???????? ……
使用(.net系统)线程池。实际上我从来不些“new一个线程实例”的代码。 写入数据直接就异步写就行了,由于是异步的,什么时候写都无所谓。没有必要搞那么复杂、那么脆弱不堪的“压在内存里”的机制。 在软件设计中,请不要什么都非常变态地要求自己。如果我们没有必要跟银行一样的安全级别,如果我们对于每个月几十块钱的误差“陪得起”,就可以使用没有事务保护的高速高效存储机制。 如果不喜欢自己写数据存储机制,可以考虑使用MSMQ作为核心应用线程(进程)跟数据存储线程(进程)之间的通讯机制。这可以基本保证宕机时的安全。
SQLDebug_Fan 2012-11-17
  • 打赏
  • 举报
回复
优化程序最主要找出瓶颈所在,看CPU、内存、IO是否都饱满,然后采取策略。
SQLDebug_Fan 2012-11-17
  • 打赏
  • 举报
回复
可以把采集的数据实例化到本地,然后后台再起一个线程去插入到数据库中。
niss 2012-11-17
  • 打赏
  • 举报
回复
任何事情都不是完美的,故障是不可避免的,我们能做的只是尽量减少故障出现的几率,为此可以将繁琐的工作分开来做,比如你的这个问题,通过采用前置机的模式可以大大降低故障造成的影响,架构上就是: 1.一台前置机,专门做数据接收 2.一台后台服务器,专门做数据处理 3.一台数据库,用于存放数据 具体就是,前置机只负责接收数据,压力会小很多,机器故障的概率会大大降低,同时通过心跳检测后台服务器是否正常,如果正常则将数据发送给后台服务器处理,如果不正常,说明后台服务器故障,则直接将未处理的数据送数据库保存,而后台服务器专门用来处理数据,尽管发生故障的可能性较高,但由于前置机的存在,就算故障了,只要恢复好再从数据库拿出未处理的数据进行处理就行了
niss 2012-11-17
  • 打赏
  • 举报
回复
这是系统架构的问题,不是程序开发的问题,再好的程序,也不可能让服务器不出现故障,不是吗?
winner2050 2012-11-17
  • 打赏
  • 举报
回复
自己测试找出瓶颈。 其实,插入数据库的操作怎么会是瓶颈。 数据库也太逊了吧。 采集数据的操作,涉及到网络,就会有网络速率问题,还有对方服务器响应速度的问题。
threenewbee 2012-11-17
  • 打赏
  • 举报
回复
详细请Google。
天-笑 2012-11-17
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
使用实时数据库
能说详细点吗???????
threenewbee 2012-11-17
  • 打赏
  • 举报
回复
使用实时数据库
本拉灯 2012-11-17
  • 打赏
  • 举报
回复
先压在内存里-》隔一分钟处理一次数据,这样要出问题就这一分钟内的数据
色拉油 2012-11-17
  • 打赏
  • 举报
回复
引用 9 楼 sp1234 的回复:
引用 楼主 shmilywcd 的回复:我这边有个应用程序,监听来自各个采集单元的数据,当收到数据后,实例化一个线程处理该数据。 采集的数据,都是插入或者更新同一数据库同一张表。如何提高这个程序的效率呢???? 我现在的想法是接收到数据后,压在内存里,当达到一定数量后 统一入库,但是这样怕服务器出异常后, 内存数据丢失。 大家有没好办法,又不丢数据,处理效……
学习了

110,571

社区成员

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

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

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