我需要在我的asp.net.net mvc项目类中为存储库方法实现时间计算。问题是我需要将时间计算数据发送到WCF服务,这非常耗时。我想到的线程可以帮助异步调用WCF服务。但是我对此很少有经验。我是否每次都需要创建新的线程,或者我可以创建一个全局线程,如果是的话,那么该怎么做?我有类似的东西:计算方法执行的时间并发送到WCF服务异步
秒表类
public class StopWatch
{
private DateTime _startTime;
private DateTime _endTime;
public void Start()
{
_startTime = DateTime.Now;
}
protected void StopTimerAndWriteStatistics()
{
_endTime = DateTime.Now;
TimeSpan timeResult = _endTime - _startTime;
//WCF proxy object
var reporting = AppServerUtility.GetProxy<IReporting>();
//Send data to server
reporting.WriteStatistics(_startTime, _endTime, timeResult, "some information");
}
public void Stop()
{
//Here is the thread I have question with
var thread = new Thread(StopTimerAndWriteStatistics);
thread.Start();
}
}
在库
public class SomeRepository
{
public List<ObjectInfo> List()
{
StopWatch sw = new StopWatch();
sw.Start();
//performing long time operation
sw.Stop();
}
}
我在做什么毛病线程使用秒表类的?性能原因,我如何重用线程?
我很担心每次创建新线程时的性能问题。也许最好使用全局线程对象进行这样的操作? – wassertim 2010-04-09 11:57:41
没有全局线程对象这样的事情。既可以手动创建线程(如您所做的那样),也可以使用使用IO完成端口的BeginXXX,EndXXX方法,并且效率非常高,因为在执行调用期间不会消耗线程。在这种情况下,对Web服务的调用从main开始,并且此主线程立即返回到线程池。 – 2010-04-09 12:10:27
是的,没有全局线程。但是我们可以以某种方式重用线程?每次创建新线程效率不高 – wassertim 2010-04-09 12:15:47