线程拆分和无锁化编程后,性能效率低下? 4C

自定义的协议栈,在协议栈上实现了一个代理发送数据。在这个传输过程中能够拆分成线程的都已经被拆分成线程,在外部与协议栈的通讯中采用了无锁化的编程,无锁队列,模拟实现了锁等操作,在性能优化后,性能下降三分之二,大家有遇到过类似的问题吗?如果有,都是如何解决的?

4个回答

有时候,线程拆分和无锁化并不能提高性能的,建议你还是改回去!

做性能优化前,一定要先做性能测试,找到瓶颈后,再来想对策。而不是一股脑的就想当然的。

根据你的需求,应该是一个订阅的模式,一方发送数据,别一方等待接受数据,并处理数据。无锁的实现有可能出现活锁的状态,过多的线程同时执行性能自然会下降。
实现了多核心运行,的系统,在单核心机器上面反而会感觉更慢(如果你的是测试环境是单核心机器)。

TestMin
TestMin 回复DS623089578: 是的,利用无锁实现的
接近 2 年之前 回复
DS623089578
DS623089578 那你不应该使用无锁机制实现
接近 2 年之前 回复
TestMin
TestMin 目前活锁的情况比较多,利用火焰图统计出来的大部分时间都是在空转
接近 2 年之前 回复
  1. 并发中如何无锁。   一个很简单的思路,把并发转化成为单线程。Java的Disruptor就是一个很好的例子。如果用java的concurrentCollection类去做,原理就是启动一个线程,跑一个Queue,并发的时候,任务压入Queue,线程轮训读取这个Queue,然后一个个顺序执行。   在这个设计模式下,任何并发都会变成了单线程操作,而且速度非常快。现在的node.js, 或者比较普通的ARPG服务端都是这个设计,“大循环”架构。   这样,我们原来的系统就有了2个环境:并发环境 + ”大循环“环境   并发环境就是我们传统的有锁环境,性能低下。   ”大循环“环境是我们使用Disruptor开辟出来的单线程无锁环境,性能强大。
TestMin
TestMin 目前我们采用的也是这种设计模式,其中队列使用的dpdk的队列,移植和实现了无锁机制,但我们得线程比较多,其中有些事件必须是阻塞的,这样就导致我们得程序运行时CPU占用率高,实际工作效率低下。
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
无锁化编程
无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程无锁化编程
cas无锁化算法
cas无锁化算法无锁算法实现级别非同步阻塞的实现可以分成以下三个级别:底层介绍ABA问题 无锁算法        CAS, CPU指令,在大多数处理器架构,包括IA32、Space中采用的都是CAS指令,CAS的语义是“我认为V的值应该为A,如果是,那么将V的值更新为B,否则不修改并告诉V的值实际为多少”,CAS是项 乐观锁 技...
java无锁化编程一:目录
假设我们用netty做服务,当接受到网络传输的码流,我们通过某种手段将这种传输数据解析成了熟悉的pojo,那这些pojo该如何进一步处理? 比如游戏中的抢购、场景业务等,对处理那种高并发的业务场景,如何保证数据的一致性? 1.悲观锁和乐观锁 悲观锁和乐观锁这种,大家立即会联想到数据库读写。但是我们仍然可以尝试的在获取对象锁上理解。 没错,锁技术很慢。 2.读写分离,读写锁 ...
工程效率低下的原因
1.光是部署基本环境(比如应用程序服务器和数据库)就需要若干张DVD和几个小时。 2.一些流行的服务器需要几分钟去启动和部署,而你每天要重复这一过程若干次。 3.为应用服务器的bug立案(并且重现问题的所在)往往比你自己修复它需要的时间更长(当然,如果你有源代码的话) 4.很难为开发者们找到一个可以高效运行那些“企业级”开发工具的硬件,而且因为这些开发工具十分昂贵,想要弃他们不用也很困...
Netty事件循环--无锁化
netty无锁化实现-事件循环机制
oracle in子句,效率低下
啥也不说了,贴上sql:nncreate or replace view my_project_view asnselect *nfrom 表A t where status='XXX' and pro_status='x' and ( flag <>'x' or flag is null ) and n( LEAD_ID = fruit_view_param.get_paramthree() or t.auto_id inn(select PROJECT_ID from 表B where LEAD_ID=fruit_view_param.get_paramthree()n or AUTO_ID in ( select PROJECTIMPL_ID from 表C where LEAD_ID=fruit_view_param.get_paramthree())n ) );n n n 问题:对于where xxx in 子句效率极其低下问题,求大神指教 。 n 我这个语句该如何去改写。
zigbee 路由选择效率低下
按需路由协议 https://blog.csdn.net/u013300635/article/details/82842332 协调器只能存有限的路由表,当需要给不在路由表且不在邻居表的设备发送数据就需要在发送前进行路由发现,找到发送路径。 假设网络中有100个设备,理想情况下20个在邻居表(一跳范围内直接发送)、20个在路由表中,那么剩下的60个节点,协调器想要发送数据就必须在发...
recv效率低下的问题
如题,我在 linux 下调用recv,执行2277000次,总耗时90139966微秒rn平均下来是39微秒一次,这个效率貌似不是很高啊!rn我对recv的socket设置了如下属性rnrn[code=C/C++]rnint i_buffer_size = INT_MAX;rnrn if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF,rn (const char*)(&i_buffer_size), sizeof(int)) == -1) rn LOG_MSG("Socket Error: Adjust SO_RCVBUF failed.%s", strerror(errno));rn return false;rn rnrn if (setsockopt(sock, SOL_SOCKET, SO_SNDBUF,rn (const char*)(&i_buffer_size), sizeof(int)) == -1) rn LOG_MSG("Socket Error: Adjust SO_SNDBUF failed.%s", strerror(errno));rn return false;rn rnrn int bOptVal = 1;rn int bOptLen = sizeof(int);rn if (setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE,rn (const char*)&bOptVal,bOptLen) == -1) rn LOG_MSG("Socket Error: Adjust SO_KEEPALIVE failed.%s", strerror(errno));rn return false;rn rnrn if (setsockopt(sock,IPPROTO_TCP,TCP_NODELAY,rn (const char*)&bOptVal,bOptLen) == -1) rn LOG_MSG("Socket Error: Adjust TCP_NODELAY failed.%s", strerror(errno));rn return false;rn rnrn if (setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,rn (const char*)&bOptVal,bOptLen) == -1) rn LOG_MSG("Enable SO_REUSEADDR failed.%s", strerror(errno));rn return false;rn rnrn struct linger lgr;rn memset(&lgr, 0x00, sizeof(struct linger));rn lgr.l_onoff = 0;rn if (setsockopt(sock, SOL_SOCKET, SO_LINGER,rn (const char*)&lgr, sizeof(linger)) == -1) rn LOG_MSG("Socket Error: Adjust SO_LINGER failed.%s", strerror(errno));rn return false;rn rnrn // linux kernel introducedrn bOptVal = 0;rn if (setsockopt(sock, IPPROTO_TCP, TCP_CORK,rn (const char*)&bOptVal, bOptLen) == -1) rn LOG_MSG("Socket Error: Adjust TCP_CORK failed.%s", strerror(errno));rn return false;rn rnrn // set socket to be non-blockingrn int on = 1;rn if (ioctl(sock,FIONBIO,(const char*)&on) < 0) rn LOG_MSG("Enable non-blocking mode failed.%s", strerror(errno));rn return false;rn rnrn return true;rn[/code]rnrnrn在recv时使用的方式为rnrnrn[code=C/C++]ret = recv(sock, (char*)((char*)(buf)+received), request,MSG_DONTWAIT);[/code]rnrnrn求高人指点迷津,将recv的执行效率提上去
Oracle in子句 效率低下
啥也不说了,贴上sql:ncreate or replace view my_project_view asnselect *nfrom 表A t where status='XXX' and pro_status='x' and ( flag <>'x' or flag is null ) and n( LEAD_ID = fruit_view_param.get_paramthree() or t.auto_id inn(select PROJECT_ID from 表B where LEAD_ID=fruit_view_param.get_paramthree()n or AUTO_ID in ( select PROJECTIMPL_ID from 表C where LEAD_ID=fruit_view_param.get_paramthree())n ) );n 问题:对于where xxx in 子句效率极其低下问题,求大神指教 。 我这个语句该如何去写。n
无锁 编程
多线程无锁编程技术
解决Hibernate效率低下问题
  前几天,客户反馈说使用系统某一个模块十分缓慢,有时候还会崩溃; 客户机器数据量大概在1W5左右,加大请求超时时间后,虽然不会崩溃,但是依然慢的吓人,1W5的数据,居然需要30~40多秒钟; 系统是使用SSH框架开发,因为关联关系比较多,所以使用Hibernate进行管理数据库,是最合适的; 问题查找: 1.出现这个问题,还得说到以前的开发人员,当时在完成项目的阶段中,在设计表的时候,...
Hibernate JPA 效率低下的原因
Hibernate JPA 效率低下的原因 Hibernate 处理 ManyToOne OneToOne的时候,default是Eager Fetch,导致取下来是整颗对象树,本以为是限制取的层数,实际发现不是,这个只是限制用JOIN连接表的层数,如果超过这么多层,下面的会另外生成SQL语句去取,直到完整一棵对象树取完,大量的SQL语句导致效率及其低下,域模型越复杂效率越低! 解决方式...
Oracle删除数据效率低下案例
前段时间碰到一电信客户的删除效率低下案例,处理的过程记录一下:现场的环境:OS:AIX6Oracle 11.2.0.4.0 问题详细描述如下:客户有一个定时任务,任务中有一步是根据主键删除某些过期的数据,但是删除效率非常低,300w的表,删除一次需要好0.5s,在此将现场环境重现一下:表的字段:SQL&amp;gt; desc subdltb 名称 ...
flume 的hdfs sink效率低下
我的flume向hdfs中写文件时,效率比较低 大约1G/3分钟 我单独测试时用脚本put的方式 1分钟能达到8G 如果用file sink也能达到1分钟1G 日志没有任何异常 只是DEBUG的时候发现每次提交一个块用时将近半分钟 rnclient.sources = r1rnclient.channels = c1rnclient.sinks = k1rnrnclient.sources.r1.type = spooldirrnclient.sources.r1.spoolDir = /var/data/tmpdatarnclient.sources.r1.fileSuffix = .COMPLETEDrnclient.sources.r1.deletePolicy = neverrnclient.sources.r1.batchSize = 500rnclient.sources.r1.channels = c1rnrnclient.channels.c1.type = memoryrnclient.channels.c1.capacity = 1000000rnclient.channels.c1.transactionCapacity = 50000rnclient.channels.c1.keep-alive = 3rnrnclient.sinks.k1.type = hdfsrnclient.sinks.k1.hdfs.path = /flume/events/%Y%m%d/%Hrnclient.sinks.k1.hdfs.useLocalTimeStamp = truernclient.sinks.k1.hdfs.rollInterval = 3600rnclient.sinks.k1.hdfs.rollSize = 1000000000rnclient.sinks.k1.hdfs.rollCount = 0rnclient.sinks.k1.hdfs.batchSize = 500rnclient.sinks.k1.hdfs.callTimeout = 30000rnclient.sinks.k1.hdfs.fileType = DataStreamrnclient.sinks.k1.channel = c1rnrnrn12 Aug 2015 16:14:24,739 DEBUG [conf-file-poller-0] (org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run:126) - Checking file:../conf/flume-client.conf for changesrn12 Aug 2015 16:14:54,740 DEBUG [conf-file-poller-0] (org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run:126) - Checking file:../conf/flume-client.conf for changesrn12 Aug 2015 16:15:24,740 DEBUG [conf-file-poller-0] (org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run:126) - Checking file:../conf/flume-client.conf for changesrn12 Aug 2015 16:15:54,741 DEBUG [conf-file-poller-0] (org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run:126) - Checking file:../conf/flume-client.conf for changesrn12 Aug 2015 16:16:24,742 DEBUG [conf-file-poller-0] (org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run:126) - Checking file:../conf/flume-client.conf for changesrn12 Aug 2015 16:16:54,742 DEBUG [conf-file-poller-0] (org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run:126) - Checking file:../conf/flume-client.conf for changesrn12 Aug 2015 16:17:24,743 DEBUG [conf-file-poller-0] (org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run:126) - Checking file:../conf/flume-client.conf for changesrn12 Aug 2015 16:17:54,744 DEBUG [conf-file-poller-0] (org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run:126) - Checking file:../conf/flume-client.conf for changesrn12 Aug 2015 16:18:24,745 DEBUG [conf-file-poller-0] (org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run:126) - Checking file:../conf/flume-client.conf for changesrn12 Aug 2015 16:18:54,746 DEBUG [conf-file-poller-0] (org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run:126) - Checking file:../conf/flume-client.conf for changesrn12 Aug 2015 16:19:24,746 DEBUG [conf-file-poller-0] (org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run:126) - Checking file:../conf/flume-client.conf for changesrnrn日志上没有异常
完美主义容易导致效率低下
以前自己在用头文件的时候, 一定是恰好, 不太喜欢包含了一些实际并没有用的头文件。 这是典型的强迫症和完美主义啊, 有个卵用, 做事速度慢得要死。        现在呢, 就疯狂包含, 管你多了还是怎样, 让程序跑起来, 然后正确,才是第一要务。         其他的事情也是一样, 完美主义有个卵用
mysql视图效率低下的问题
每天要从日志中抽取一些信息存放在数据库中,大概80多Mrn当单张表到达一定数量的时候(2G以上),再对表做批量插入操作,就会比较慢。rnrn所以现在就拆表。rn插入:rn做多张结构一样的表,然后对新表进行插入操作。rn查询:rn做一个视图给查询使用rn修改,删除rn不需要这样的操作rnrnrn现在发现对视图的select效率非常低下。rn有比较好的解决这种问题的方法吗?rn
如此效率低下的Event类!!
我想在一定的条件下结束线程,这个条件是在线程的父进程中判断的,用了以下两种方法:rn方法一:rn定义一个Event对象的句柄:HANDLE hEvent;rnrn创建该Event对象:hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);rnrn在终止线程的条件成熟时调用:SetEvent(hEvent);rnrn创建线程函数:AfxBeginThread(Thread,&this->hEvent);rnrn线程函数:rnUINT Thread(LPVOID lParam)rnrn HANDLE* hEvent=(HANDLE*)lParam;rn for(int i=0;i<2147483647;i++)//只是举个运算量很大的例子rn rn if(WaitForSingleObject(*hEvent,0)==WAIT_OBJECT_0)rn break;rn ......rn //这里做些计算量不是太大的计算rn ......rn rn return 0rnrnrn方法二:rn定义一个BOOL型变量:BOOL isAbort;rnrn初始化这个BOOL型变量:isAbort=FALSE;rnrn在终止线程的条件成熟时:isAbort=TRUE;rnrn创建线程函数:AfxBeginThread(Thread,&this->isAbort);rnrn线程函数:rnUINT Thread(LPVOID lParam)rnrn BOOL* isAbort=(BOOL*)lParam;rn for(int i=0;i<2147483647;i++)//只是举个运算量很大的例子rn rn if(*isAbort)rn break;rn ......rn //这里做些计算量不是太大的计算rn ......rn rn return 0rnrn这两种方法都能实现线程的即时安全终止,可是比较这两种方法你会发现,第二种方法的执行速度是第一种的三到四倍,如果省略号中的语句计算量更小的话,第一种还会比第二种成倍的慢。rn如此低效率的Event类,我们还用它干什么?难道必需用它,我上面的第二种方法,调试了这么久,好像也没发现错误。希望大家给我点经验,那些地方用Event比较适合?rnrn另外,上面说的两方法,不管第二种方法的效率有多高,他们始终还是程序查询方式的,能否改成中断方式呢?我想了很久也找不到解决的办法,希望各位高手帮忙!
两个线程交替执行+1,无锁化实现和synchronized 、condition实现的效率对比
今天面试阿里被问到一个简单的多线程问题,脑子里第一个闪现的是wait()和notify(),写代码的时候又蹦出些其它想法,结果写的时间有点长,实现也有点混乱,回来后把当时的想法整理了一下,分别比较一下实现效率。 1.synchronized + wait +notify 这个实现可以看连接https://blog.csdn.net/woainiwss/article/details/52013...
无锁(CAS)编程
 1.  无 锁类 的原理 详 解 1.1.CAS        CAS算法的过程是这样:它包含3个参数CAS(V,E,N)。V表示要更新的变量,E表示预期值,N表示新值。仅当V值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做了更新,则当前线程什么都不做。最后,CAS返回当前V的真实值。CAS操作是抱着乐观的态度进行的,它总是认为自己可以成功完成操作。当多个线程...
16.无锁化编程有哪些常见方法
无锁化编程有哪些常见方法?·        针对计数器,可以使用原子加·        只有一个生产者和一个消费者,那么就可以做到免锁访问环形缓冲区(Ring Buffer)多个线程也不怕,利用queue去处理。(并发转成单线程)·        RCU(Read-Copy-Update),新旧副本切换机制,对于旧副本可以采用延迟释放的做法·        CAS(Compare-and-Swap...
StreamWriter反复实化例化输出效率低下,我这代码应如何提高效率?
我下面是用了while动态取得内容,再StreamWriter输出写文件,但是我发现在 while里面不断重复实例化StreamWriter时,效率会变得很低,很耗资源,请问如何将 StreamWriter实例化移到 while 的外面来?或者有没有更高效的写法?谢谢大家rnrnwhile (Dr.Read())rnrn ......rn //生成 动态文件名 和 内容rn ......rnrn StreamWriter sw = new StreamWriter("文件名", true, );rn sw.Write("内容");rn sw.Flush();rn sw.Close(); rnrnrn分数不多,全部奉上,谢谢大家帮忙。
关于oracle大数据量导入后进行处理的疑问,效率低下
有300w的订购关系数据。需要导入到数据库中,然后将每一条数据分发到不同的区域订购表。n n 我的处理流程:n n 1. 首先建一张临时数据表。用sqlldr将300w数据导入到临时表中n n 2. 用存储过程遍历这张表。每次取5w的数据,放到游标中。然后每一条去做处理,分发到不同的订购表中。n n 3. 将这5w条数据处理过后,提交,并在临时表中删除这5w条数据。然后循环,再取5w处理。直到临时表中数据删除。n n 测试结果显示,这样的效率很差。50w的数据处理差不多就要一个小时。n n 是不是我的处理方式有问题。或者5w的数据放在游标中不合适?n n 有经验的帮忙看看,谢谢!
求助:orcale库迁到mysql后性能低下问题~~~~
最近为了降低成本,我们把web服务的数据库从orcale迁到了mysql, mysql上表结构和索引的建立同orcale库相同,程序上面也只是把sql语句改成了mysql支持的语法。rnrn但是web服务跑起来以后出现了严重的性能问题,页面的响应的响应速度都明显变慢了,以前大概是几百毫秒,现在则需要5秒甚至更多,直接在mysql上执行页面的查询sql就需要好几秒钟。有些sql的逻辑是比较复杂,最复杂的关联了两个表,表的数据规模大概在十万到百万级。rnrn想请教各位大牛,迁库后遇到这种问题应该从哪方面下手,数据库优化还是修改程序逻辑?rnrn在此先感谢各位了~~~rn
sql in not in where 混搭 效率低下
rnrn 一个 旧项目 出现的 能源问题:rnrn 出现问题的 原句:rn [code=SQL]rnselect * from stock where leechdomId rn inrn (rn select leechdomId from collect rn where id rn not inrn (rn select collectId from quote rn where type=0 and date >'2010-06-01 10:00:02'rn ) and date>'2010-06-01 10:00:02'rn ) and date>'2010-06-01 10:00:02'rn[/code]rnrn in 嵌套 not in 加 三个where 有两个and 运行多次 一般需要 7秒;rn-------------------------------------------------------------------------------rnrn in 里面的句子 rn[code=SQL]rn select leechdomId from collect rn where id rn not inrn (rn select collectId from quote rn where type=0 and date >'2010-06-01 10:00:02'rn ) and date>'2010-06-01 10:00:02'rn[/code]rn 也就是 在in 里 嵌套的句子同样需要 7秒rn--------------------------------------------------------------------------rn not in 最深层的句子rn[code=SQL]rn select collectId from quote rn where type=0 and date >'2010-06-01 10:00:02'rn[/code]rn 运行 显示为 0秒rn--------------------------------------------------------------------------rn第二层 in 里面的句子 去掉一个条件rn 去掉时间判断:rn[code=SQL]rnselect leechdomId from collect rn where id rn not inrn (rn select collectId from quote rn where type=0 and date >'2010-06-01 10:00:02'rn ) rn[/code]rn 或者去掉 not in:rn[code=SQL]rn select leechdomId from collect rn where date>'2010-06-01 10:00:02'rn[/code]rn 时间都会显示为 0秒rn------------------------------------------------------------------------rnrn 综合以上的结果来看,in 并没有显现降低效率(费解),如果把第二层的 not in 和判断时间的语句 放在一起的话 会降低效率,去掉一个就不会产生效率问题(同样费解)。rn 费解中。。。。 求指教,怎么样才能解决掉这种效率问题,还有今后怎么去避免这种问题,现在的数据是 大约是 3万条。。。。。。。。。
大数据量cte效率低下可有解决办法?
大数据量cte效率低下可有解决办法?rnrn目前工作中遇到一个有性能瓶颈的script,发现重要集中在用cte做递归这块,如下rnrnWITH temp_orgChart_zl(ManagerID, UserID, iteration) AS rn(rnrnSELECT ManagerID, UserID, 0rnFROM dbo.tblUser WHERE (ManagerID = N'00081442')rnrnUNION ALL rnrnSELECT a.ManagerID, b.UserID, a.iteration + 1rnFROM temp_orgChart_zl AS a, dbo.tblUser AS brnWHERE a.UserID = b.ManagerIDrn)rnINSERT INTO [zl_test]rn ([UserID])rnSELECT UserID FROM temp_orgchart_zlrnrn一共耗时2分33秒插入数据10633条rn数据分布情况是dbo.tblUser有45034条rnrn可有解决办法?本来cte是sql2005的新功能,但是感觉跟表变量一样,数据量小的时候性能提高,数据量稍微大点性能就显著下降了。解决这个问题不会是用游标自己递归吧?
数据仓库学习笔记 --- 数据仓库效率低下的原因
1. 脱离业务设计数据仓库 2. 错误评估数据仓库的影响力 3. 空谈多于实践 4. 增加不必要的复杂度 5. 项目负责人缺乏适当的权力 6. 糟糕的项目管理 具体解释如下: 一、脱离业务设计数据仓库 很多数据仓库的项目负责人会脱离业务来设计数据仓库,这样做的原因可能是其本身对业务的理解不深,也可能是对业务并不重视。 不管是什么原因,脱离业务来设计数据仓库,都会让你的...
统计字符1的个数 效率低下
```rn#include "stdio.h"rn#include "string.h"rn#define maxn 10000000 + 10rnint main()rnrn char s[maxn];rn scanf("%s",s);rn int tot = 0;rn for (int i = 0;i
Visual Studio 下vector<string> 效率低下的解决方案
  Windows下vector&amp;lt;string&amp;gt; strList; strList.push_back(&quot;this is a test&quot;); 当重复执行多次的时候,就很卡,效率特别低。 在linux下是没有太多性能问题的。   要解决这个问题,在以前可能需要用指针,vector&amp;lt;string *&amp;gt; 类型来处理,这种方式可能会产生内存泄漏,还要由自己管理内存的释放...
关于CaffeOnSpark 集群效率低下的问题解决方案
在我之前的文章上可以看到关于CaffeOnSpark的搭建教程。 这里假设大家已经把整个集群启动。我的配置:node: 四台计算机: 三台Ubuntu 16.04 8Gb内存 Gtx1080 一台 CentOs 7 8Gb 内存 Gtx970 作为master 不参与工作配置的节点数量不应该过大,否则集群之间的数据传递是一个很大的问题。Executor数量造成数据倾斜在官方的Git上用的
“效率低下”时项目经理的应对策略
效率低下是指在生成结果过程中浪费时间或精力,或者没能生成结果。遗憾的是,导致效率低下的因素渗透在项目管理的各个方面。 效率需求和加在项目经理身上的许多约束是一致的。对范围、时间、成本及 质量的竞争需求,以及项目管理中其他5个分支领域的知识,常会对项目经理所做的事情进行限制。为了使效益最大化,项目经理必须从项目的所有技术和流程中努力得到最多的可利用效能。然而,有时要获取额外的资源可能会超出项目...
EXCEL.application 设置格式效率低下的问题
现在有个项目 用户要到处2000多个 数据块 放在EXCEL里rnrn用 文件流导出这些数据倒是很快,但是调用EXCEL.application去设置 每个数据块的 边框的时候出现了问题。rnrn设置一整个边框几乎要用1秒的时间,有没有什么高效的设置EXCEL边框的方法?rnrn现在设置格式的代码如下rn[code=HTML]rnrn rn rn rn startCellRow = startCellRow + 6;rn objRange = objWorkSheet.Range("B" & startCellRow,"V" & (startCellRow + 2 + monthRowCount));rn WriteExcelLineByBordersItem("7");rn WriteExcelLineByBordersItem("10");rn WriteExcelLineByBordersItem("8");rn WriteExcelLineByBordersItem("9");rn rn objRange = objWorkSheet.Range("B" & startCellRow,"V" & (startCellRow + 1));rn WriteExcelLineByBordersItem("9");rn rn objRange = objWorkSheet.Range("B" & (startCellRow + 2 + monthRowCount),"V" & (startCellRow + 2 + monthRowCount));rn WriteExcelLineByBordersItem("8");rn rn objRange = objWorkSheet.Range("S" & startCellRow,"V" & (startCellRow + 2 + monthRowCount));rn WriteExcelLineByBordersItem("7");rn rn objRange = objWorkSheet.Range("F" & (startCellRow + 4 + monthRowCount),"L" & (startCellRow + 7 + monthRowCount));rn WriteExcelLineByBordersItem("7");rn WriteExcelLineByBordersItem("10");rn WriteExcelLineByBordersItem("3");rn WriteExcelLineByBordersItem("9");rn rn objRange = objWorkSheet.Range("H" & (startCellRow + 4 + monthRowCount),"H" & (startCellRow + 7 + monthRowCount));rn WriteExcelLineByBordersItem("10");rn rn rnrn[/code]rnrnrnrn
求证SQL SERVER索引效率低下的原因!
一个表TABLE,里面有A、B、C、D四个列。我为B和C建立了非聚集的索引。rn因为某种原因,做查询就是要把这个表的数据全部返回。rn这个表约有16000行的数据,查询的时候,只限制其返回B和C两个列。rn查询返回这个表的所有数据,目前使用SQL Server 2000,最快4900毫秒(好慢~)rn我的机器是双Xeon 2.66 + 1GDDR,已经允许SQL Server使用并行处理和最多的内存,用DRIVER方法连接到数据库。rn现在查询的时候,不管where使用何种条件,抑或用(INDEX)强制使用索引,均得不到效果。rn###rn难道是因为返回的结果太多,而导致索引失效?(有人证实一下么?)rn###rn不过我原来用Access的时候,最快可以在500毫秒左右,完成上述的操作……rn这又是为什么啊?有没有达人解释下?唉……
我做的webService为什么效率如此低下?
我做的webService为什么效率如此低下?rnrn首先我将我的项目情况向大家描述一下:rn项目由以下部分组成:rnWebServicernAsp.net服务程序rn其中,Asp.net服务程序在接收到客户端的请求后会实时的向webService发起一个调用,而webService会rnrn操作数据库,然后向Asp.net服务程序返回结果,最后,Asp.net跟据WebService的返回结果向客户端浏览rnrn器返回结果;rnrn问题:rn对Asp.net服务器程序进行压力测试,发现性能奇差,连每秒50个请求都无法承受。rn但是,单独测试webService每秒可以处理300个请求左右, 单独测试Asp.net服务器程序(不关联WebService)每秒可以处理500个请求左右;rn请问,问题会出在哪里呢?
Linux用户层多线程无锁化原子操作
Linux用户层多线程无锁化原子操作
ios原生条形码扫描 效率低下原因
ios原生AVFoundation支持同时扫描二维码和条形码 但是,如果设置扫描类型,同时为二维码和条形码( dataOutput.metadataObjectTypes = @[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code,AVMetadataObjectTypeEAN8Code,AVMetadataObjectTypeC
DateTime类型比较效率低下的问题
有一段这样的SQLrnrnWITH VUNIT as (rnrn通过递归调用查询数据rnrn(大概两万条数据)rnrn)rnrnselect count(*) from TableArnrnwhere EXISTS (rnrnselect VUNIT.iUnidIdrnrnfrom VUNITrnrnwhere VUNIT.vcUnitLevel = TableA.vcUnitLevelrnrn)rnrnand TableA.dtStartDate <= '2011/08/15' and TableA.dtEndDate >= '2011/08/21'rnrn不好意思,开发环境里的代码和数据不能带出来,靠回忆只能写成这样了。rnrn其中,dtStartDate和dtEndDate都是datetime类型的数据,TableA的数据有两万多条,符合检索条件的才42条,但耗时半个小时都不能执行完rnrn如果把select count(*) 改成select *, 或者用DateDiff函数运行,只要一秒钟。rnrn这是什么问题?我觉得select count(*) 比select *执行得快才对呀?rnrn希望高人指点rn
poi导出excel循环效率低下的问题
[code=Java]rn//获取需要的用户信息 rnlu = comm.findalluser();rn for (User u : lu) rn//查出所有客户信息rn la = salesaccountdao.listpallAccount(u.getUserid());rn if (la.size() > 0) rn accountLists.addAll(la);rn rn rn//将查处的所有客户信息导出成excel[color=#FF0000](一下循环费时)[/color]rn int i=0,j=0,size = accountLists.size();rn for (i = 1; i < size; i++) rn // 获得这个sheet的第i行rn row = sheet1.createRow(i);rn for (j = 0; j < 12; j++) rn // 设置每个sheet每一行的宽度,自动,根据需求自行确定rn sheet1.autoSizeColumn(j + 1, true);rn // 获得这一行的每j列rn cell = row.createCell(j);rn switch (j) rn case 0:rn cell.setCellValue(accountLists.get(i).getName());rn break;rn case 1:rn cell.setCellValue(accountLists.get(i).getAddress());rn break;rn case 2:rn cell.setCellValue(accountLists.get(i).getCity());rn break;rn case 3:rn cell.setCellValue(accountLists.get(i).getCreatetime());rn break;rn case 4:rn cell.setCellValue(accountLists.get(i).getCustomertype());rn break;rn case 5:rn cell.setCellValue(accountLists.get(i).getDescription());rn break;rn case 6:rn cell.setCellValue(accountLists.get(i).getProvince());rn break;rn case 7:rn cell.setCellValue(accountLists.get(i).getStatecode());rn break;rn case 8:rn cell.setCellValue(accountLists.get(i).getFax());rn break;rn case 9:rn cell.setCellValue(accountLists.get(i).getIndustrycode());rn break;rn case 10:rn cell.setCellValue(accountLists.get(i).getRemarks());rn break;rn case 11:rn cell.setCellValue(accountLists.get(i).getWebsiteurl());rn break;rn case 12:rn cell.setCellValue(accountLists.get(i).getTelephone());rn break;rn case 13:rn cell.setCellValue(accountLists.get(i).getUserByOwnerid().getName());rn break;rn rn rn rn[color=#FF0000]//就在生成excel的嵌套循环中,浪费了大量时间,总的600条数据,打印时间却是110秒钟,请高手指点一二,不胜感激!![/color]rn[/code]
效率低下,请高手帮忙改进!
针对收费客户要求的报表,我做了一个函数rnCREATE FUNCTION [dbo].[getpd] (@name varchar(32),@c_jffs varchar(16),@time datetime)rnRETURNS varchar(8000) AS rnBEGIN rndeclare @pd varchar(8000)rnset @pd = ''rndeclare @n_min int,@n_max int,@is_begin int,@n_flag intrnselect @n_min=min(cast(c_fph as int)) from t_sf_detail where is_ok=1 and len(rtrim(c_fph))>0 and c_pcname=@name and c_jffs=@c_jffs and year(@time)=year(c_time) and month(@time)=month(c_time) and day(@time)=day(c_time) rnselect @n_max=max(cast(c_fph as int)) from t_sf_detail where is_ok=1 and len(rtrim(c_fph))>0 and c_pcname=@name and c_jffs=@c_jffs and year(@time)=year(c_time) and month(@time)=month(c_time) and day(@time)=day(c_time) rnset @is_begin = @n_minrnset @n_flag = @n_minrnif @n_min is not null and @n_min <> 0rnbeginrn while @n_min <= @n_max + 1rn beginrn if not exists (select * from t_sf_detail where c_fph = cast(@n_min as varchar) and is_ok=1 and len(rtrim(c_fph))>0 and c_pcname=@name and c_jffs=@c_jffs and year(@time)=year(c_time) and month(@time)=month(c_time) and day(@time)=day(c_time))rn beginrn if @n_min > @is_begin + 1 begin set @pd = @pd + cast(@is_begin as varchar) + '-' + cast(@n_min - 1 as varchar) + ',' end rn else begin set @pd = @pd + cast(@is_begin as varchar) + ',' endrn set @n_flag = @n_minrn select @n_min=min(cast(c_fph as int)) from t_sf_detail where cast(c_fph as int) > @n_flag and is_ok=1 and len(rtrim(c_fph))>0 and c_pcname=@name and c_jffs=@c_jffs and year(@time)=year(c_time) and month(@time)=month(c_time) and day(@time)=day(c_time) rn set @is_begin = @n_minrn end rn set @n_min = @n_min + 1rn end rnend rnelse begin set @pd = '无记录,' end rnset @pd = left( @pd ,len(@pd) - 1 )rnreturn @pdrnendrn数据结构是一条收费记录最多对应一个发票号(c_fph),要求根据收费员(@name),交费方式(@c_jffs)h和交费时间进行汇总rn我创建这个函数来得到针对每个人、交费方式、交费日期不同的发票号(1,2,5,6,7,8,9,11,13 要显示成 1-2,5-9,11,13 这是客户的要求)rn虽然可以实现,但数据量大的时候慢的让人难以忍受,各位帮忙改进或给点解决的思路呀,谢谢了!
Update关联查询不走索引,效率低下
   优化一个sql,就是有A,B两个表,要利用b表的字段更新a表对应的字段。形如Sql代码  update A set A.a=(select B.b from B where A.id=B.id);  原SQLupdatepntmall_rptpoint_detail a set a.scrm_rptpnt_processed=(select distinctb.scrm_rptpnt_pro...
读取数据并创建Excel文件的效率低下
[code=C#]rnprivate static void DownloadFile(System.Web.UI.Page page, string targetFile) rnrn FileInfo DownloadFile = new FileInfo(targetFile);rnrn page.Response.Clear();rn page.Response.ClearHeaders();rn page.Response.Buffer = false;rn page.Response.ContentType = "application/octet-stream";rn page.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(DownloadFile.FullName, System.Text.Encoding.UTF8));rn page.Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());rn page.Response.WriteFile(DownloadFile.FullName);rn page.Response.Flush();rn page.Response.End(); rnrnrnprivate static void ToExcel(System.Web.UI.Page page, System.Data.DataTable dataSource)rnrn string targetFile = ConfigurationManager.AppSettings["Exportfile"].ToString();rn if (File.Exists(targetFile))rn rn File.Delete(targetFile);rn rnrn ApplicationClass xlApp = new ApplicationClass();rnrn xlApp.Application.Workbooks.Add(true);rnrn xlApp.Visible = false;rnrn object missing = System.Reflection.Missing.Value;rnrn Workbook xlBook = xlApp.Workbooks[1];rn Worksheet xlSheet = (Worksheet)xlBook.ActiveSheet;rnrn //设置标题列rn for (int i = 0; i < dataSource.Columns.Count; i++)rn rn xlSheet.Cells[1, i + 1] = dataSource.Columns[i].ColumnName;rn rnrnrn //向Excel插入数据 rn for (int i = 0; i < dataSource.Rows.Count; i++)rn rn for (int j = 0; j < dataSource.Columns.Count; j++)rn rn xlSheet.Cells[i + 2, j + 1] = dataSource.Rows[i][j].ToString();rn xlSheet.get_Range(xlSheet.Cells[1, j + 1], xlSheet.Cells[1, j + 1]).Borders.LineStyle = 1;rn xlSheet.get_Range(xlSheet.Cells[i + 2, j + 1], xlSheet.Cells[i + 1, j + 1]).Borders.LineStyle = 1;rn rn rnrn //设置Excel单元格为最适应宽度 rn xlSheet.get_Range(xlSheet.Cells[1, 1], xlSheet.Cells[dataSource.Rows.Count, dataSource.Columns.Count]).Select();rn xlSheet.get_Range(xlSheet.Cells[1, 1], xlSheet.Cells[dataSource.Rows.Count, dataSource.Columns.Count]).Columns.AutoFit();rnrn //另存文件到指定路径下 rn xlBook.SaveAs(targetFile, missing, missing, missing, missing, missing, XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing);rn //关闭文件 rn xlBook.Close(false, targetFile, true);rn xlApp.Quit();rn System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet);rn System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook);rn System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);rn rn //强制释放无用资源 rn GC.Collect();rn DownloadFile(page, targetFile);rnrn[/code]rn用以上代码读数据后创建Excel文件,然后下载文件,效率非常低,5行数据要等10—15秒,700行数据居然等了40分钟。(读数据的效率没问题,700行数据读出来保存到DataTable只是一瞬间)
相关热词 c#部署端口监听项目、 c#接口中的属性使用方法 c# 昨天 c#func链接匿名方法 c#怎么创建文件夹 c#从键盘接收空格 c#da/ad c#部门请假管理系统 c#服务器socket c# 默认的访问修饰符