Performance WCF、ThreadPool.QueueUserWorkItem和Windows Azure
我有个奇怪的问题,希望你能帮我解决 在我们的开发服务器上,我们在具有8GB RAM的虚拟x64实例上运行带有IIS 7.5的Windows 2008R2 这里我调用了一个WCF方法,该方法使用ThreadPool.QueueUserWorkItem来处理大量分层数据。这工作很好,而且工作速度相当快(一个270MB的XML被读取并处理,在379秒内生成190.035条记录)。客户端在大约250秒内完成了对该方法的调用 现在,WindowsAzure上相同的“工作流”是另一种情况。虽然类似(循环配置中的大型实例),但Windows Azure会在几秒钟内停止客户端断开连接。这意味着只写入160.055条记录,速度要慢得多-917秒。这里的问题是,我错过了大约30000条记录,现在应该在两个Azure实例上排队,但是在客户端断开连接时,似乎放弃了剩余的工作 客户端使用HttpWebRequest进行通信,两种解决方案都运行.NET 4.0 我错过了什么Performance WCF、ThreadPool.QueueUserWorkItem和Windows Azure,performance,iis,azure,threadpool,Performance,Iis,Azure,Threadpool,我有个奇怪的问题,希望你能帮我解决 在我们的开发服务器上,我们在具有8GB RAM的虚拟x64实例上运行带有IIS 7.5的Windows 2008R2 这里我调用了一个WCF方法,该方法使用ThreadPool.QueueUserWorkItem来处理大量分层数据。这工作很好,而且工作速度相当快(一个270MB的XML被读取并处理,在379秒内生成190.035条记录)。客户端在大约250秒内完成了对该方法的调用 现在,WindowsAzure上相同的“工作流”是另一种情况。虽然类似(循环配置
提前感谢您在这个问题上提供的任何帮助。我的坏蛋们-我简直无法想象Windows Azure会这么慢。。因此,通过将HttpWebRequest从2分钟增加到30分钟,我能够实现与开发环境中相同的数据量 所以-我不会删除这个问题-但让这个站作为参考,为您很快来Azure的家伙 我肯定Azure(和其他云提供商)是未来的发展方向,但从丹麦到“北欧”,延迟很高,而SQLAzure还没有证明它在谈论OLTP和规范化数据库时能够发挥作用 开发(虚拟环境) 299 MB文件中的190.335条记录在单个实例上花费了379秒 WINDOWS AZURE(北欧) 299 MB文件中的190.335条记录在两个大型实例上花费了1.400秒 好消息是,WCF和ThreadPool工作完美,不需要特别考虑(高超时除外)
只是想澄清一下,299MB文件在对服务器的多个REST调用中被拆分,格式与此类似:
<?xml version="1.0" encoding="UTF-8"?>
<HttpPost absolutePath="A/B/C/D/E/OO">
<Parameters xmlns="http://somenamespace">
<A>Package</A>
<B>100</B>
<C>Generic</C>
<D>ReceiverParty</D>
<E>
<F xmlns="http://somenamespace">
<G xmlns="http://somenamespace/Product">Long Text</G>
<H xmlns="http://somenamespace/Product">1</H>
<I xmlns="http://somenamespace/Product">PK</I>
<J xmlns="http://somenamespace/Product">5995</J>
<K xmlns="http://somenamespace/Product">
<L xmlns="http://somenamespace/P/Q">Discount</L>
<M xmlns="http://somenamespace/P/Q">1000</M>
<N xmlns="http://somenamespace/P/Q">6995</N>
</K>
</F>
</E>
<OO>
<O>
<A>Product</A>
<B>100</B>
<C>Generic</C>
<D>ReceiverParty</D>
<E>
<F xmlns="http://somenamespace">
<G xmlns="http://somenamespace/Product">Long Text</G>
<H xmlns="http://somenamespace/Product">1</H>
<I xmlns="http://somenamespace/Product">PK</I>
<J xmlns="http://somenamespace/Product">5995</J>
<K xmlns="http://somenamespace/Product">
<L xmlns="http://somenamespace/P/Q">Discount</L>
<M xmlns="http://somenamespace/P/Q">1000</M>
<N xmlns="http://somenamespace/P/Q">6995</N>
</K>
</F>
</E>
</O>
</OO>
</Parameters>
</HttpPost>
包裹
100
通用的
接管人
长文本
1.
主键
5995
优惠
1000
6995
产品
100
通用的
接管人
长文本
1.
主键
5995
优惠
1000
6995
似乎我已经回答了自己的问题。由于Azure平台非常慢(延迟和SQLAzure),我需要将HttpWebRequest的超时时间从2分钟提高到30分钟。我将再次尝试启用线程池,看看我是否自己解决了它:-)干杯。。