如何提高sql执行效率WCF的执行效率

posts - 23,&
comments - 19,&
trackbacks - 0
在WCF中使用Gzip压缩的配置方法
这是一种基于WCF通道传输数据的压缩技术,只要通过配置就可以在自己的项目中使用压缩技术,比较方便!
服务端App.config
&system.serviceModel&
&services&
&service behaviorConfiguration="metadataBehavior" name="WcfTest.Services.SwfBuilderService"&
&endpoint address="http://127.0.0.1:99/swfbuild" binding="customBinding" bindingConfiguration="BufferedHttpSampleServer" bindingName="BufferedHttpSampleServer" contract="WcfTest.Contracts.ISwfBuilder" /&
&/service&
&/services&
&extensions&
&bindingElementExtensions&
&add name="gzipMessageEncoding" type="GZipEncoder.GZipMessageEncodingElement, GZipEncoder, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /&
&/bindingElementExtensions&
&/extensions&
&bindings&
&customBinding&
&binding name="BufferedHttpSampleServer"&
&gzipMessageEncoding innerMessageEncoding="textMessageEncoding" /&
&httpTransport hostNameComparisonMode="StrongWildcard"
manualAddressing="False"
maxReceivedMessageSize="65536"
authenticationScheme="Anonymous"
bypassProxyOnLocal="False"
useDefaultWebProxy="True" /&
&/binding&
&/customBinding&
&/bindings&
&system.serviceModel&
客户端App.config
&system.serviceModel&
&bindings&
&customBinding&
&binding name="WSHttpBinding_SwfBuilderService"&
&gzipMessageEncoding innerMessageEncoding="textMessageEncoding" /&
&httpTransport manualAddressing="false"
authenticationScheme="Anonymous"
bypassProxyOnLocal="false"
hostNameComparisonMode="StrongWildcard"
proxyAuthenticationScheme="Anonymous"
useDefaultWebProxy="true" /&
&/binding&
&/customBinding&
&/bindings&
&/system.serviceModel&
&extensions&
&bindingElementExtensions&
&add name="gzipMessageEncoding" type="GZipEncoder.GZipMessageEncodingElement, GZipEncoder, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /&
&/bindingElementExtensions&
&/extensions&
&endpoint address="http://127.0.0.1:99/swfbuild" binding="customBinding"
bindingConfiguration="WSHttpBinding_SwfBuilderService" contract="SwfBuild.SwfBuilderService"
name="WSHttpBinding_SwfBuilderService"&
&/endpoint&
&metadata&
&policyImporters&
&extension type="GZipEncoder.GZipMessageEncodingBindingElementImporter, GZipEncoder, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /&
&/policyImporters&
&/metadata&
下载压缩类:
阅读(...) 评论()我用WCF做了一个比较大的应用,很高,但同时有几十个来访问时,这个服务就变得有点慢了,但服务器CPU占用还是比较低的状态。感觉问题出在通道上,即便服务上任何事不做,直接返回,客户端调用时因为用户量大而返回时延时不小。想请教一下高人,在哪里出了问题?下面是我的各处:
&customBinding&
&ding name="myMexTcpBinding"&
&binaryEncoding&
&readerQuotas maxDepth="32" maxStringContentLength="819200" maxArrayLength="1638400" maxBytesPerRead="409600" maxNameTableCharCount="1638400"/&
&/binaryMessageEncoding&
&tcpTransport maxBufferPoolSize="" maxReceivedMessageSize="" maxBufferSize=""/&
&/binding&
&binding name="mybinding"&
&binaryMessageEncoding&
&readerQuotas maxDepth="32" maxStringContentLength="819200" maxArrayLength="1638400" maxBytesPerRead="409600" maxNameTableCharCount="1638400"/&
&/binaryMessageEncoding&
&tcpTransport maxBufferPoolSize="" maxReceivedMessageSize="" maxBufferSize=""/&
&/binding&
&/customBinding&
&/bindings&
&service behaviorConfiguration="MyBehavior" name="Services.BaseDataManage.BaseDataManage"&
&endpoint address="" binding="customBinding" bindingConfiguration="mybinding" contract="Services.BaseDataManage.IBaseDataManage"&
&identity&
&dns value="http://s.yanghao.org/program/"/&
&/identity&
&/endpoint&
&endpoint address="mex" binding="customBinding" bindingConfiguration="myMexTcpBinding" contract="IMetadataExchange"/&
&baseAddresses&
&add baseAddress="net.tcp://localhost:8802/BaseDataManage/"/&
&/baseAddresses&
&/service&
&behavior name="MyBehavior"&
&serviceMetadata httpGetEnabled="false"/&
&serviceDebug includeExceptionDetailInFaults="true"/&
&serviceTimeouts transactionTimeout="23:59:59"/&
&serviceThrottling maxConcurrentCalls="1000" maxConcurrentSessions="1000" maxConcurrentInstances="1000"/&
&/behavior&
[ServiceContract(CallbackContract=typeof(IBaseDataCallBack))]
public partial
IBaseDataManage
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerCall)]
public partial class BaseDataManage : IBaseDataManage
--------------------------------------
几十个客户端访问,这个数量不多啊,你看看能不能优化尽量减少每个客户端的交互次数
--------------------------------------
交互次数已经优化得很少了,不能再减少交互次数了。
--------------------------------------
检查服务器的内存使用率,现在CPU往往不是瓶颈,内存却很容易不足,如果内存太少建议改用Stream模式,而不要缓存数据。
--------------------------------------
引用 2 楼 sntyy 的回复:交互次数已经优化得很少了,不能再减少交互次数了。那你看看能不能压缩一下传输内容
--------------------------------------
16G的内存,平时占用2G左右,高峰期浮动也不大,试过压缩传输内容,效率反到降低了,因为每次传输的数据量很小
--------------------------------------
CPU是E5-2620*2,这个配置算是很高了
--------------------------------------
在执行某个&串行任务&导致的.多核心,可看到,是否某个CPU,占有率满了.(虽然整体CPU利用率,看起来,10%或者 5%. 遇到被阻塞在 串行任务时, 很容易看到, 处理器利用率 = 1/N核心数)
--------------------------------------
引用 5 楼 sntyy 的回复:16G的内存,平时占用2G左右,高峰期浮动也不大,试过压缩传输内容,效率反到降低了,因为每次传输的数据量很小被卡在 串行任务上了.并行,第一课. 阿达姆定律, 串行任务卡住了, 所以, 你CPU是E5-2620*2 也没有任何提升.
--------------------------------------
wcf其中, 序列化,就是一个 很慢的玩意, 不说文本,xml等,哪怕是 bin 序列化, 也仍然是很慢的.
--------------------------------------
整个服务上复杂的业务都是另开线程做的
--------------------------------------
引用 10 楼 sntyy 的回复:整个服务上复杂的业务都是另开线程做的任何一本多核/并行,阿达姆定律,那一章节,有很多经典的曲线图. 20? 64? 核心后,要保证多少性能提升.必须要保证串行占 0.5% ?还是更少. 程序 = 并行 + 串行 + 并行 + 串行 + ...
你的情况,大概就是被卡在 串行部分(尽管你的业务是)跑一下性能分析,就能看到了. 卡在某个串行的代码上,也许是序列化或者其它串行部分
--------------------------------------
引用 5 楼 sntyy 的回复:16G的内存,平时占用2G左右,高峰期浮动也不大,试过压缩传输内容,效率反到降低了,因为每次传输的数据量很小如果系统是32位的,2G就是峰值了,一般WCF最好跑在X64平台下面,以X64优化。
--------------------------------------
想问问,CandPointer,有没有什么?至于X64的问题,我也有一台X64的系统,运行效率没什么变化
--------------------------------------
引用 13 楼 sntyy 的回复:想问问,CandPointer,有没有什么解决方案?至于X64的问题,我也有一台X64的系统,运行效率没什么变化看你的配置都是最新LGA2011双路至强处理器了,就不假设是 硬盘//内存/64位等IO的因素大概就是卡在 串行代码的原因(虽然你看到处理器占有率很低. 大概 5% 的CPU占用, 双路e5 =
24个逻辑处理器 , 卡在单线程, 可能看到,就是处理器占有率 = 1/24 & 10% ,迷惑人,使得误以为 不是CPU原因)慢在串行代码, 所以,你就是 10000个处理器,也无法改变性能差,只能看到CPU占有率很低很低先分析性能啊, 区域是哪里? 也就是, 什么地方的代码, 导致了性能变差?
(visua1 studio自带的就有性能分析. 更强大的工具,是intel的parallel studio==&它也可以分析C#性能)内存分配?序列化? ?, 首先总得找到哪个地方的使得性能差. 然后针对性调优
--------------------------------------
多核效率,要想达到90%
.处理器超过 12个核心时, 你的串行代码的比例,需要小于 1%
(这个代码,包含你执行时,调用的 各种API等占用CPU的东西)
--------------------------------------
嗯,我正尝试用vs的性能分析工具,但好像没法分析服务呢,我的wcf服务是做成windows服务的
--------------------------------------
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)][OperationContract(IsOneWay = true)]已在多个项目上应用,架在普通配置服务器上,至今最多65个客户端频繁与本服务交互,未见较大延迟(&1)应该是你内部代码有问题,比如线程间的锁操作太多等等
--------------------------------------
当然,如果wcf每次发送的包比较大的话,也会随客户端的数量增加,明显提升延迟
--------------------------------------
引用 17 楼 marclee44 的回复:未见较大延迟(&1)是小于1秒s怎么莫名抽掉了- -
--------------------------------------
引用 17 楼 marclee44 的回复:[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)][OperationContract(IsOneWay = true)]已在多个项目上应用,架在普通配置服务器上,至今最多65个客户端频繁与本服务交互,未见较大延迟(&1)应该是你内部代码有问题,比如线程间的锁操作太多等等
……[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerCall)]我用的是这个配置,PerCall和Single都试过,好像差异不大,至于“线程间的锁操作太多”这个确实有些多。但访问一个方法,里边不操作直接返回感觉延时也不小
--------------------------------------
先找出慢在哪里,比如网络,与的交互,以及自身逻辑的多线程
--------------------------------------
引用 21 楼 dongxinxi 的回复:先找出慢在哪里,比如网络,与数据库的交互,以及自身逻辑的多线程嗯,正在努力中。。。
--------------------------------------
ConcurrencyMode也用的Single,完全单线程处理IsOneWay = true,保证客户端不等服务返回值需要返回值的情况,由服务处理完请求后,主动Callback,并为每个连接维护一个Callback的队列这样,锁都基本不需要了没有太过复杂、太过耗时操作的逻辑时,速度应该是很快的,除非请求和Callback的内容很庞大
--------------------------------------
非常不错,学习了
--------------------------------------
是否配置了吞吐量
--------------------------------------
引用 23 楼 marclee44 的回复:ConcurrencyMode也用的Single,完全单线程处理IsOneWay = true,保证客户端不等服务返回值需要返回值的情况,由服务处理完请求后,主动Callback,并为每个连接维护一个Callback的队列这样,锁都基本不需要了没有太过复杂、太过耗时操作的逻辑时,速度应该是很快的,除非请求和Callback的内容很庞大嗯,用了IsOneWay = true,不然程序会死锁。。流程基本就是这样的,经过大家的分析,感觉问题基本上就在线程间锁的的问题上了
--------------------------------------
回调采用非阻塞
--------------------------------------
还有就是慢在linq to object/sql上了,这个要改就头痛了
--------------------------------------
性能不好的原因很多:1、事务:事务是需要同步上下文和会话,因此发生阻塞,若达到会话连接最高值,之后的会话需排队甚至超时;解决:将支持事务与非事务的服务分开成不同的服务;2、回调:回调需要采用独立线程或线程池执行回调操作,否则可能在回调时因掉线、长时间运算、超时等因素造成会话一直占用或长时间占用,尽可能在设计上让服务IsOneWay=true;3、在服务器资源允许的情况下:采用InstanceContextMode.PerCall,UseSynchronizationContext=false,ConcurrencyMode = ConcurrencyMode.Multiple,这种能最大的并发应用。4、吞吐量配置,我不知道如何配,我自己是写了一个ServiceThrottlingAttribute,继承Attribute和IServiceBehavior,最后配置最大连接数 MaxConcurrentSessions (WCF默认为10),上下文实例数 MaxConcurrentInstances,最大待处理消息数或回调数,MaxConcurrentCalls(WCF默认64),5、以上仅是我配置过的,可能有些解释不正确,但通过这样的改动后,并发和性能都得到很大的提升,由于我这里是工作流服务,目前最高有工作流在同时运行,并没有发生明显的阻塞。
--------------------------------------
--------------------------------------
性能不好的原因很多:1、事务:事务是需要同步上下文和会话,因此发生阻塞,若达到会话连接最高值,之后的会话需排队甚至超时;解决:将支持事务与非事务的服务分开成不同的服务;2、回调:回调需要采用独立线程或线程池执行回调操作,否则可能在回调时因掉线、长时间运算、超时等因素造成会话一直占用或长时间占用,尽可能在设计上让服务IsOneWay=true;3、在服务器资源允许的情况下:采用InstanceContextMode.PerCall,UseSynchronizationContext=false,ConcurrencyMode = ConcurrencyMode.Multiple,这种能最大的并发应用。4、吞吐量配置,我不知道配置文件如何配,我自己是写了一个ServiceThrottlingAttribute,继承Attribute和IServiceBehavior,最后配置最大连接数 MaxConcurrentSessions (WCF默认为10),上下文实例数 MaxConcurrentInstances,最大待处理消息数或回调数,MaxConcurrentCalls(WCF默认64),5、以上仅是我配置过的,可能有些解释不正确,但通过这样的改动后,并发和性能都得到很大的提升,由于我这里是工作流服务,目前最高有工作流在同时运行,并没有发生明显的阻塞。
--------------------------------------
IsOneWay = true最好别用,否则执行成功与否根本不知道,可靠性比速度更重要。锁也最好别用,多线程同步不应该用锁,那个是下下之策,多线程同步的上上之策是用关键字volatile定义全局变量。
--------------------------------------
引用 32 楼 qldsrx 的回复:IsOneWay = true最好别用,否则执行成功与否根本不知道,可靠性比速度更重要。锁也最好别用,多线程同步不应该用锁,那个是下下之策,多线程同步的上上之策是用关键字volatile定义全局变量。volatile这东西还没有用过,看介绍好像不能实现比如两个线程同时访问时,只允许其中一个线程修改这个变量的值
--------------------------------------
引用 33 楼 sntyy 的回复:volatile这东西还没有用过,看介绍好像不能实现比如两个线程同时访问时,只允许其中一个线程修改这个变量的值不叫不能实现,那是故意这样设置的,他帮你处理好了线程锁,不会出现多线程访问的数据不准确性。
--------------------------------------
引用 34 楼 qldsrx 的回复:引用 33 楼 sntyy 的回复:volatile这东西还没有用过,看介绍好像不能实现比如两个线程同时访问时,只允许其中一个线程修改这个变量的值不叫不能实现,那是故意这样设置的,他帮你处理好了线程锁,不会出现多线程访问的数据不准确性。我试了这样一段代码,每次MessageBox.Show出来的结果都不一样
volatile Int32 xxx = 0;
private void xButton4_Click(object sender, EventArgs e)
Parallel.For(0, , a =& {
MessageBox.Show(xxx.ToString());
--------------------------------------
是不是我的Parallel.For没有用对?应该怎么用?
--------------------------------------
引用 32 楼 qldsrx 的回复:IsOneWay = true最好别用,否则执行成功与否根本不知道,可靠性比速度更重要。锁也最好别用,多线程同步不应该用锁,那个是下下之策,多线程同步的上上之策是用关键字volatile定义全局变量。volatile仅仅用来保持变量副本的一致性,用于防御寄存器优化,基本上没什么用。
--------------------------------------
引用 35 楼 sntyy 的回复:我试了这样一段代码,每次MessageBox.Show出来的结果都不一样你的MessageBox.Show(xxx.ToString());是在Parallel.For没有结束的情况下就运行了,你没有等待那个多线程任务完全运行完毕啊
--------------------------------------
引用 37 楼 sbwwkmyd 的回复:volatile仅仅用来保持变量副本的一致性,用于防御寄存器优化,基本上没什么用。那个关键字是效率最高的同步方案,非常有用,你用过没有?对于原子操作,用volatile代替lock是最佳的做法,而对于集合操作,例如Dictionary,则使用提供的支持同步的集合类:ConcurrentDictionary,总之在.NET4.0里面,可以找到很多预设的同步方案来替代lock,另外即使找不到,也不会沦落到用lock的地步,可以用Interlocked类,可以说,没有Interlocked类处理不了的多线程同步操作。
--------------------------------------
引用 39 楼 qldsrx 的回复:那个关键字是效率最高的同步方案,非常有用,你用过没有?对于原子操作,用volatile代替lock是最佳的做法,而对于集合操作,例如Dictionary,则使用微软提供的支持同步的集合类:ConcurrentDictionary,总之在.NET4.0里面,可以找到很多预设的同步方案来替代lock,另外即使找不到,也不会沦落到用lock的地步,可以用Interlocked类,可以说,没有Interlocked类处理不了的多线程同步操作。只是知道volatile,没有用过,基本上没有volatile能解决的需求。Interlocked一般也用得少,要替代lock需要Thread.Sleep或者while吧,高并发的情况得不偿失。对于我而言,一般应用都是几段临界代码,若干状态的同步,同步集合类根本不能满足需求。
--------------------------------------
引用 40 楼 sbwwkmyd 的回复:Interlocked一般也用得少,要替代lock需要Thread.Sleep或者while吧,高并发的情况得不偿失。Interlocked不需要任何的等待,否则就失去了它的存在意义了,如果你觉得它不是最佳的,你可以反编译微软的dll,看看微软的同步类是如何自我实现的。微软用到同步的地方,绝大多数都是用Interlocked来实现的。volatile确保了操作的原子性,确保了对象时刻呈现最新,一般情况下也足够了。不放心的情况下,才使用Interlocked来做验证,如果验证下来不一致,则重复前面的操作,这比用lock效率高很多,因为线程之间无需任何的等待,更不可能死锁。
--------------------------------------
引用 41 楼 qldsrx 的回复:Interlocked不需要任何的等待,否则就失去了它的存在意义了,如果你觉得它不是最佳的,你可以反编译微软的dll,看看微软的同步类是如何自我实现的。微软用到同步的地方,绝大多数都是用Interlocked来实现的。volatile确保了操作的原子性,确保了对象时刻呈现最新,一般情况下也足够了。不放心的情况下,才使用Interlocked来做验证,如果验证下来不一致,则重复前面的操作,这比用lock效率高很多,因为线程之间无需任何的等待,更不可能死锁。如果不需要等待,那也就没有lock存在的价值了。可是我碰到过的实际需求,大多数都是需要同步等待的。Interlocked仅仅可以做状态检测,主要用于单一状态的同步。只能说自旋锁,volatile,Interlocked,lock之间存在选择的关系,各有各的应用环境。
--------------------------------------
下面这段代码,我用volatile定义的变量“aa”,在B线程中同样会报错,最后用了lock(aa)整个程序才能正常执行完,但用Interlocked怎么来解决“aa”的同步问题呢?看了ms的文档,没看明白对list如何使用volatile List&string& aa = new List&string&();
private void xButton1_Click(object sender, EventArgs e)
st = new Stopwatch();
st.Start();
aa.Clear();
new Thread(new ThreadStart(a)).Start();
new Thread(new ThreadStart(b)).Start();
int x = 1000000;
while (x &= 0)
aa.Add(x + "");
int x = 1000;
while (x &= 0)
each (var item in aa) ;
this.Invoke((EventHandler)delegate
st.Stop();
this.xTextBox1.Text += st.ElapsedMilliseconds.ToString() + "\r\n";
--------------------------------------
引用 43 楼 sntyy 的回复:下面这段代码,我用volatile定义的变量“aa”,在B线程中同样会报错,最后用了lock(aa)整个程序才能正常执行完,但用Interlocked怎么来解决“aa”的同步问题呢?看了ms的文档,没看明白对list如何使用C# code?53637……对于List&T&的同步确实不好处理,因为你是直接foreach对其遍历的,这意味着foreach未结束之前,要限制其它线程对其操作。不用Lock的情况下,你可以考虑使用索引对其操作,这样每次获取的动作都是独立的。Interlocked的目的是写入同步,意思是当你要往List中某个索引处更新内容的时候,同时其它List也想往这个索引里面更新内容,那么该索引处的内容就未知,为了保证更新成功,使用Interlocked可以在更新失败后及时发现,进行再次更新。微软没有提供List&T&的多线程同步类,其它集合类基本都提供了,你可以查找下Concurrent开头的类名。这主要是因为List&T&的访问会涉及到其本身容量大小,如果一个线程在改变其容量(你例子中的线程A),另一个线程访问它,就会出错。你试试限制List的容量,或者干脆用数组替代,那样foreach访问应该能正常,而索引查找更不会超出索引号。对于需要改变List容量的情况,则只能Lock不让其它线程访问。
--------------------------------------
引用 41 楼 qldsrx 的回复:volatile确保了操作的原子性,确保了对象时刻呈现最新,一般情况下也足够了。不放心的情况下,才使用Interlocked来做验证,如果验证下来不一致,则重复前面的操作,这比用lock效率高很多,因为线程之间无需任何的等待,更不可能死锁。如果volatile能够确保操作的原子性,那还要Interlocked干什么?volatile仅仅用于禁止寄存器优化,保证每次都重新从内存取值,并不保证操作的原子性。
--------------------------------------
/data/archive//2809045.htmlwcf确实效率很底。。所以自己写了一个。。
--------------------------------------
引用 46 楼 zanfeng 的回复:/dataexcel/archive//2809045.htmlwcf确实效率很底。。所以自己写了一个。。很低不至于,只是庞大了些,而且底层通信协议是可以自己改的,因此你所谓效率低的部分是可以优化的,只要自定义绑定类即可,当然难度比自己写会高,需要完全学会WCF的二次。C#语言 &&&&最新内容
C#语言 &&&&随机内容您所在的位置: &
WCF并发能力提高技巧分享
WCF并发能力提高技巧分享
WCF并发能力的提高方法将会在这篇文章中为大家详细介绍,希望初学者们可以从中获得一些帮助,以方便将来的实际应用。
服务中的并发能力可以通过一些手段进行提高,来帮助开发人员进行更好的使用。在这里我们将会针对各种提高办法做一个详细介绍,以方便大家对此的理解,希望你能从中获得一些帮助。
WCF并发能力提高步骤:
1.把同样的WCF服务,在多个端口上&启动&(即同时运行多个wcf的实例,但每个实例都监听不同的端口)
2.用svcutil.exe生成的代理类,里面有N多构造函数的重载版本,观察一下类似下面的这个版本
public&AstroServiceClient(string&endpointConfigurationName)&:& &base(endpointConfigurationName) &{ &}&
即传入配置名生与代码类的实例,我们在web.config中的wcf配置节,做如下处理:
&&&&address=&http://localhost:8001/Astro/&&binding=&wsHttpBinding&&bindingConfiguration=&WSHttpBinding_IAstroService&&contract=&IAstroService&&name=&1&&&&&&value=&localhost&&&&/identity&&/endpoint&&&address=&http://localhost:8002/Astro/&&binding=&wsHttpBinding&&bindingConfiguration=&WSHttpBinding_IAstroService&&contract=&IAstroService&&name=&2&&&&&&value=&localhost&&&&/identity&&/endpoint&&&address=&http://localhost:8003/Astro/&&binding=&wsHttpBinding&&bindingConfiguration=&WSHttpBinding_IAstroService&&contract=&IAstroService&&name=&3&&&&&&value=&localhost&&&&/identity&&/endpoint&&/client&
即对应多个wcf服务端的实例,配置多个name的endpoint节点
3.修改客户端的调用代码提高WCF并发能力
把原来类似这样的代码:
using&(AstroServiceClient&_client&=&new&AstroServiceClient())&
using&(AstroServiceClient&_client&=&new&AstroServiceClient(new&Random().Next(1,&4).ToString()))&
即客户端随机从多个wcf服务端的host中挑一个,生成代码类实例
大功告成,说白了就是把一个wcf的host分身成了3个,并且客户端随机调用3者之一。以上就是WCF并发能力的相关提高方法介绍。【责任编辑: TEL:(010)】
关于的更多文章
WCF是基于Windows平台下开发和部署服务的软件开发包(SDK)。WCF
所以姑娘,让我们做一枚花见花开的程序媛。
讲师: 10人学习过讲师: 8人学习过讲师: 14人学习过
从2006年12月份Sun发布Java 6后,经过五年多的不懈努
借助Google的三大论文,Hadoop打开了低成本海量数据处
春运大军前天正式启动了。昨天的新闻有几条不怎么好的
本书共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆
51CTO旗下网站}

我要回帖

更多关于 提高php 脚本执行效率 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信