我一直在对应用程序进行cpu分析,并且我注意到,花费大量时间的事情之一是代码,该代码确保我每秒向Web服务发送的查询多于查询。与之相比,实际的查询本身和结果的处理花费的时间很少,当然,有一个I / O组件在等待结果,但是我想做的是减少cpu,因为应用程序有时必须在单个cpu机器上运行
使用 YourKit Profiler 使用大量CPU的呼叫是
Public Function Get_Department_Name(ByVal Recipient As String)
Dim obApp As Object
Dim NewMail As MailItem
Set obApp = Outlook.Application
Set NewMail = obApp.CreateItem(olMailItem)
With NewMail
.Subject = "Test Subject"
.To = Recipient
.Body = " Body of Message "
End With
Get_Department_Name = NewMail.Recipients.Item(1).AddressEntry.Manager().Department
NewMail.Delete
Set obApp = Nothing
Set NewMail = Nothing
End Function
我的延迟方法低于
java.util.concurrent.locks.AbstractQueuedSynchronizer.aquireQueued()
答案 0 :(得分:0)
好吧,使用Google Guava库,事实证明它非常简单
import com.google.common.util.concurrent.RateLimiter;
public class SearchServer
{
private static RateLimiter rateLimiter = RateLimiter.create(1.0d);
static void doDelayQuery()
{
rateLimiter.acquire();
}
public doQuery()
..................
}
尽管以前的主要区别是我花了上次通话的时间,所以没有在通话之间等待一秒钟,所以为了获得相似的吞吐量,我将RateLmiter更改为使用2.0d
分析不再显示该区域的CPU命中率。