我有一组网络服务每天被击中2,000,000次; 7个网络服务。 每个服务当前都将传入的XML消息丢弃到磁盘(它是一个大磁盘)。
文件丢弃发生在请求开始时,我想将其关闭到一个新线程,所以我不会丢失写入文件所需的20ms。是的,那些20ms比你想象的更重要。
我正在使用.NET 2.0,并且想到了两种方法:对DropMessage()方法进行异步方法调用,或者启动一个新的Thread并调用它。
private void DumpMessage()// this method dumps the incoming message to File.
DumpMessages管理自己的业务。如果失败,它会知道该怎么做以及如何联系我的团队。
public delegate void AsyncDumpMessage();
AsyncDumpMessage caller = new AsyncDumpMessage(DumpMessage);
IAsyncResult result = caller.BeginInvoke(null, null);
VS
System.Threading.Thread t = new System.Threading.Thread(DumpMessage);
t.Start();
以上两个有什么警告吗?我倾向于使用异步方法,因为通过我的测试我已经获得了更好的性能
有什么其他想法可以更好地实现这一目标吗?性能和稳定性对我来说至关重要。
答案 0 :(得分:1)
我会使用ThreadPool.QueueUserWorkItem来安排这项工作。
这将使用ThreadPool线程,该线程比启动单独线程的开销更小。它还建议一个“fire and forget”方法调用,其中异步委托调用建议您使用IAsyncResult
。
在更现代的框架版本中,我建议使用Task.Run
,但这在.NET 2中不起作用。