2

我有一组每天被访问 2,000,000 次的 Web 服务;7 网络服务。每个服务当前都将传入的 XML 消息放入磁盘(它是一个大磁盘)。

文件丢失发生在请求开始时,我想把它放到一个新线程上,这样我就不会失去写入文件所需的 20 毫秒。是的,这 20 毫秒比你想象的更重要。

我正在使用 .NET 2.0,并想到了两种方法来做到这一点:对 DropMessage() 方法的异步方法调用,或者启动一个新线程并调用它。

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);

对比

System.Threading.Thread t = new System.Threading.Thread(DumpMessage);
t.Start();

以上两个有什么注意事项吗?我倾向于异步方法,因为我通过测试获得了更好的性能

还有其他更好的方法来做到这一点吗?性能和稳定性对我来说很关键。

4

1 回答 1

1

我会使用ThreadPool.QueueUserWorkItem来安排这项工作。

这将使用一个 ThreadPool 线程,它的开销比启动一个单独的线程要少。它还建议使用“即发即弃”方法调用,其中异步委托调用建议您使用IAsyncResult.

在更现代的框架版本中,我会推荐Task.Run,但这在 .NET 2 中不起作用。

于 2013-06-06T00:32:31.210 回答