如果WCF服务用到服务器的稀缺资源,该资源的创建和销毁极耗服务器时间和性能,这种情况如果提高服务器性能呢?
    我们知道WCF的实例模式有三种:Per-Call 、Per-Session 、Singleton。我们来分析一下:第一种Per-Call ,每一个Client Call都会一个服务实例和资源对象,这样的性能是无法忍受的;第二种Per-Session ,这种情况稍为改善了服务器性能,但是海量并发请求的时候比前者好不到哪去;第三种Singleton单件模式,保证只有一个服务实例和资源对象,但是并发访问时候会发生线程冲突。
     在这种情况下,资源池派上了用场,把大操作对象(资源对象)放到一个池里面,这个池是启动服务之后提供服务之前创建好的,响应客户端请求时从池里获取一个可用的资源对象,请求响应过后释放该资源,使之响应下一个请求。
     关键点在于:当并发请求数大于资源对象池大小时,如何排队等候。我们来看WCF是怎么处理这种情况的。WCF有三种Service Concurrency Mode:Single、Multiple、Reentrant。默认是Single,每次只能响应一个请求,其它请求被阻塞;Multiple服务实例是多线程的,所有并发请求立刻被响应,无同步保证,但是我们可以用Throttling节流措施来限制并发请求数,使并发数刚好等于资源池的大小,其它的请求排队等候,保证每个请求都有可用资源。看下面的例子:
     以GDI+为例,我们创建Graphic绘图对象池,Client请求服务器给它绘制一幅图。
1、先设计一个服务契约:

WCF学习之:利用Throttling提高服务器性能using System;
WCF学习之:利用Throttling提高服务器性能
using System.Collections.Generic;
WCF学习之:利用Throttling提高服务器性能
using System.Linq;
WCF学习之:利用Throttling提高服务器性能
using System.Runtime.Serialization;
WCF学习之:利用Throttling提高服务器性能
using System.ServiceModel;
WCF学习之:利用Throttling提高服务器性能
using System.Text;
WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能
namespace Tloner.Throttling.WcfServiceLibrary1
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能    
// 注意: 如果更改此处的接口名称“IService1”,也必须更新 App.config 中对“IService1”的引用。
WCF学习之:利用Throttling提高服务器性能
    [ServiceContract]
WCF学习之:利用Throttling提高服务器性能    
public interface IService1
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能    
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能        [OperationContract]
WCF学习之:利用Throttling提高服务器性能        
byte[] DrawImg(string str);
WCF学习之:利用Throttling提高服务器性能    }

WCF学习之:利用Throttling提高服务器性能}

2、设计一个资源类和资源池
WCF学习之:利用Throttling提高服务器性能    public class MyResource
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能    
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能        
public Bitmap bitmap;
WCF学习之:利用Throttling提高服务器性能        
public Graphics graphics;
WCF学习之:利用Throttling提高服务器性能        
public bool usable;
WCF学习之:利用Throttling提高服务器性能        
public int resourceIndex;
WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能        
public MyResource(int index)
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能        
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能            bitmap 
= new Bitmap(500500);
WCF学习之:利用Throttling提高服务器性能            graphics 
= Graphics.FromImage(bitmap);
WCF学习之:利用Throttling提高服务器性能            usable 
= true;
WCF学习之:利用Throttling提高服务器性能            resourceIndex 
= index;
WCF学习之:利用Throttling提高服务器性能        }

WCF学习之:利用Throttling提高服务器性能    }

WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能    
public class ResourceCollection : List<MyResource>
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能    
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能        
public ResourceCollection(int capacity)
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能        
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能            
for (int i = 0; i < capacity; i++)
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能            
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能                
this.Add(new MyResource(i));
WCF学习之:利用Throttling提高服务器性能            }

WCF学习之:利用Throttling提高服务器性能        }

WCF学习之:利用Throttling提高服务器性能        
public MyResource CatchResource()
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能        
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能            
lock (this)
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能            
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能                
for (int i = 0; i < this.Count; i++)
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能                
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能                    
if (this[i].usable == true)
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能                    
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能                        
this[i].usable = false;
WCF学习之:利用Throttling提高服务器性能                        Console.WriteLine(
"catch resource index:{0}", i);
WCF学习之:利用Throttling提高服务器性能                        
return this[i];
WCF学习之:利用Throttling提高服务器性能                    }

WCF学习之:利用Throttling提高服务器性能                }

WCF学习之:利用Throttling提高服务器性能            }

WCF学习之:利用Throttling提高服务器性能            
return null;
WCF学习之:利用Throttling提高服务器性能        }

WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能        
public void ReleaseResource(int index)
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能        
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能            
lock (this)
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能            
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能                Console.WriteLine(
"release resource index:{0}", index);
WCF学习之:利用Throttling提高服务器性能                
this[index].usable = true;
WCF学习之:利用Throttling提高服务器性能            }

WCF学习之:利用Throttling提高服务器性能        }

WCF学习之:利用Throttling提高服务器性能    }
ResourceCollection资源池的构建函数里按照容量添加资源对象
CatchResource()方法用于获取一个可用资源来响应请求
ReleaseResource(int index)方法释放一个资源,使它为其它请求服务

3、服务实现
WCF学习之:利用Throttling提高服务器性能    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
WCF学习之:利用Throttling提高服务器性能    
public class Service1 : IService1
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能    
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能        ResourceCollection resourceCollection;
WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能        
public Service1()
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能        
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能            resourceCollection 
= new ResourceCollection(3);
WCF学习之:利用Throttling提高服务器性能            Console.WriteLine(
"create a ResourceCollection");
WCF学习之:利用Throttling提高服务器性能            Console.WriteLine(
"create a service instance");
WCF学习之:利用Throttling提高服务器性能        }

WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能        
public byte[] DrawImg(string str)
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能        
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能            MyResource resource 
= null;
WCF学习之:利用Throttling提高服务器性能            MemoryStream stream 
= new MemoryStream(); ;
WCF学习之:利用Throttling提高服务器性能            
try
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能            
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能                resource 
= resourceCollection.CatchResource();
WCF学习之:利用Throttling提高服务器性能                System.Diagnostics.Debug.Assert(resource 
!= null"no free resource");
WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能                Console.WriteLine(
"using resource index:{0}", resource.resourceIndex);
WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能                resource.graphics.Clear(Color.White);
WCF学习之:利用Throttling提高服务器性能                resource.graphics.DrawRectangle(
new Pen(Color.Red), 00498498);
WCF学习之:利用Throttling提高服务器性能                Font drawFont 
= new Font("Arial"30);
WCF学习之:利用Throttling提高服务器性能                SolidBrush drawBrush 
= new SolidBrush(Color.Red);
WCF学习之:利用Throttling提高服务器性能                resource.graphics.DrawString(str, drawFont, drawBrush, 
100100);
WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能                resource.bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能                Thread.Sleep(
3000);
WCF学习之:利用Throttling提高服务器性能            }

WCF学习之:利用Throttling提高服务器性能            
catch (Exception ex)
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能            
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能                Console.WriteLine(ex.Message);
WCF学习之:利用Throttling提高服务器性能            }

WCF学习之:利用Throttling提高服务器性能            
finally
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能            
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能                resourceCollection.ReleaseResource(resource.resourceIndex);
WCF学习之:利用Throttling提高服务器性能            }

WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能            
return stream.GetBuffer();
WCF学习之:利用Throttling提高服务器性能        }

WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能        
~Service1()
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能        
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能            Console.WriteLine(
"destroy a service instance");
WCF学习之:利用Throttling提高服务器性能        }

WCF学习之:利用Throttling提高服务器性能    }
实例模式设为InstanceContextMode = InstanceContextMode.Single,保证只有一个服务实例,该实例是在服务Host的时候创建的。响应DrawImg(string str)请求的时候catch一个可用Graphic对象资源用来绘制,绘制完了把它Release释放掉。为了更好展现请求状态,在每次DrawImg时让线程等待3秒。

4、Host服务
WCF学习之:利用Throttling提高服务器性能using System;
WCF学习之:利用Throttling提高服务器性能
using System.Collections.Generic;
WCF学习之:利用Throttling提高服务器性能
using System.Linq;
WCF学习之:利用Throttling提高服务器性能
using System.Text;
WCF学习之:利用Throttling提高服务器性能
using System.ServiceModel;
WCF学习之:利用Throttling提高服务器性能
using Tloner.Throttling.WcfServiceLibrary1;
WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能
namespace host
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能    
class Program
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能    
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能        
static void Main(string[] args)
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能        
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能            
using (ServiceHost serivceHost = new ServiceHost(typeof(Service1)))
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能            
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能                serivceHost.Opened 
+= delegate
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能                
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能                    Console.WriteLine(
"Service has begun to listen WCF学习之:利用Throttling提高服务器性能 WCF学习之:利用Throttling提高服务器性能");
WCF学习之:利用Throttling提高服务器性能                }
;
WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能                serivceHost.Open();
WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能                Console.Read();
WCF学习之:利用Throttling提高服务器性能            }

WCF学习之:利用Throttling提高服务器性能        }

WCF学习之:利用Throttling提高服务器性能    }

WCF学习之:利用Throttling提高服务器性能}
Configuration:
WCF学习之:利用Throttling提高服务器性能<?xml version="1.0" encoding="utf-8" ?>
WCF学习之:利用Throttling提高服务器性能
<configuration>
WCF学习之:利用Throttling提高服务器性能    
<system.web>
WCF学习之:利用Throttling提高服务器性能        
<compilation debug="true" />
WCF学习之:利用Throttling提高服务器性能    
</system.web>
WCF学习之:利用Throttling提高服务器性能    
<system.serviceModel>
WCF学习之:利用Throttling提高服务器性能        
<services>
WCF学习之:利用Throttling提高服务器性能            
<service name="Tloner.Throttling.WcfServiceLibrary1.Service1" behaviorConfiguration="WcfServiceLibrary1.Service1Behavior">
WCF学习之:利用Throttling提高服务器性能                
<host>
WCF学习之:利用Throttling提高服务器性能                    
<baseAddresses>
WCF学习之:利用Throttling提高服务器性能                        
<add baseAddress = "http://localhost:8732/Design_Time_Addresses/WcfServiceLibrary1/Service1/"/>
WCF学习之:利用Throttling提高服务器性能                    
</baseAddresses>
WCF学习之:利用Throttling提高服务器性能                
</host>
WCF学习之:利用Throttling提高服务器性能                
<endpoint address ="" binding="basicHttpBinding" contract="Tloner.Throttling.WcfServiceLibrary1.IService1">
WCF学习之:利用Throttling提高服务器性能                    
<identity>
WCF学习之:利用Throttling提高服务器性能                        
<dns value="localhost"/>
WCF学习之:利用Throttling提高服务器性能                    
</identity>
WCF学习之:利用Throttling提高服务器性能                
</endpoint>
WCF学习之:利用Throttling提高服务器性能                
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
WCF学习之:利用Throttling提高服务器性能            
</service>
WCF学习之:利用Throttling提高服务器性能        
</services>
WCF学习之:利用Throttling提高服务器性能        
<behaviors>
WCF学习之:利用Throttling提高服务器性能            
<serviceBehaviors>
WCF学习之:利用Throttling提高服务器性能                
<behavior name="WcfServiceLibrary1.Service1Behavior">
WCF学习之:利用Throttling提高服务器性能                    
<serviceThrottling maxConcurrentCalls="3"/>
WCF学习之:利用Throttling提高服务器性能                    
<serviceMetadata httpGetEnabled="True"/>
WCF学习之:利用Throttling提高服务器性能                    
<serviceDebug includeExceptionDetailInFaults="False" />
WCF学习之:利用Throttling提高服务器性能                
</behavior>
WCF学习之:利用Throttling提高服务器性能            
</serviceBehaviors>
WCF学习之:利用Throttling提高服务器性能        
</behaviors>
WCF学习之:利用Throttling提高服务器性能    
</system.serviceModel>
WCF学习之:利用Throttling提高服务器性能
</configuration>
WCF学习之:利用Throttling提高服务器性能
注意,这里的<serviceThrottling maxConcurrentCalls="3"/>设置为跟服务实现里的resourceCollection = new ResourceCollection(3)的值一致,并发数和池大小相等才能保证每个请求都有可用的资源。
5、client调用服务
WCF学习之:利用Throttling提高服务器性能using System;
WCF学习之:利用Throttling提高服务器性能
using System.Collections.Generic;
WCF学习之:利用Throttling提高服务器性能
using System.Linq;
WCF学习之:利用Throttling提高服务器性能
using System.Text;
WCF学习之:利用Throttling提高服务器性能
using System.Threading;
WCF学习之:利用Throttling提高服务器性能
using System.ServiceModel;
WCF学习之:利用Throttling提高服务器性能
using Tloner.Throttling.WcfServiceLibrary1;
WCF学习之:利用Throttling提高服务器性能
using System.ServiceModel.Channels;
WCF学习之:利用Throttling提高服务器性能
using System.Drawing;
WCF学习之:利用Throttling提高服务器性能
using System.IO;
WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能
namespace client
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能    
class Program
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能    
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能        
static void Main(string[] args)
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能        
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能            
try
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能            
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能                
for (int i = 0; i < 10; i++)
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能                
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能                    ThreadStart ts 
= new ThreadStart(ClientCall);
WCF学习之:利用Throttling提高服务器性能                    Thread th 
= new Thread(ts);
WCF学习之:利用Throttling提高服务器性能                    th.Start();
WCF学习之:利用Throttling提高服务器性能                }

WCF学习之:利用Throttling提高服务器性能            }

WCF学习之:利用Throttling提高服务器性能            
catch (Exception ex)
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能            
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能                Console.WriteLine(ex.Message);
WCF学习之:利用Throttling提高服务器性能            }

WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能            Console.Read();
WCF学习之:利用Throttling提高服务器性能        }

WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能        
static void ClientCall()
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能        
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能            
using (ThrottlingClient client = new ThrottlingClient("throttling"))
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能            
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能                
byte[] data = client.DrawImg(Thread.CurrentThread.ManagedThreadId.ToString());
WCF学习之:利用Throttling提高服务器性能                MemoryStream stream 
= new MemoryStream(data);
WCF学习之:利用Throttling提高服务器性能                Bitmap bitmap 
= new Bitmap(stream);
WCF学习之:利用Throttling提高服务器性能                bitmap.Save(
@"c:\" + Thread.CurrentThread.ManagedThreadId.ToString() + ".png", System.Drawing.Imaging.ImageFormat.Png);                
WCF学习之:利用Throttling提高服务器性能                Console.WriteLine(
"CurrentThreadID: {0}", Thread.CurrentThread.ManagedThreadId.ToString());
WCF学习之:利用Throttling提高服务器性能            }

WCF学习之:利用Throttling提高服务器性能        }

WCF学习之:利用Throttling提高服务器性能    }

WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能    
class ThrottlingClient : ClientBase<IService1>, IService1
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能    
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能        
public ThrottlingClient()
WCF学习之:利用Throttling提高服务器性能            : 
base()
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能        
WCF学习之:利用Throttling提高服务器性能{ }
WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能        
public ThrottlingClient(string endpointConfigurationName)
WCF学习之:利用Throttling提高服务器性能            : 
base(endpointConfigurationName)
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能        
WCF学习之:利用Throttling提高服务器性能{ }
WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能        
public ThrottlingClient(Binding binding, EndpointAddress address)
WCF学习之:利用Throttling提高服务器性能            : 
base(binding, address)
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能        
WCF学习之:利用Throttling提高服务器性能{ }
WCF学习之:利用Throttling提高服务器性能
WCF学习之:利用Throttling提高服务器性能        
public byte[] DrawImg(string str)
WCF学习之:利用Throttling提高服务器性能WCF学习之:利用Throttling提高服务器性能        
WCF学习之:利用Throttling提高服务器性能{
WCF学习之:利用Throttling提高服务器性能            
return this.Channel.DrawImg(str);
WCF学习之:利用Throttling提高服务器性能        }

WCF学习之:利用Throttling提高服务器性能    }

WCF学习之:利用Throttling提高服务器性能}

WCF学习之:利用Throttling提高服务器性能
创建10个线程模拟10个并发请求,把服务器绘制返回的图保存到本地。
Configuration:
WCF学习之:利用Throttling提高服务器性能<?xml version="1.0" encoding="utf-8" ?>
WCF学习之:利用Throttling提高服务器性能
<configuration>
WCF学习之:利用Throttling提高服务器性能    
<system.serviceModel>
WCF学习之:利用Throttling提高服务器性能        
<bindings>
WCF学习之:利用Throttling提高服务器性能            
<basicHttpBinding>
WCF学习之:利用Throttling提高服务器性能                
<binding name="throttlingBinding"
WCF学习之:利用Throttling提高服务器性能                 sendTimeout
="00:10:00"
WCF学习之:利用Throttling提高服务器性能                 transferMode
="Streamed"
WCF学习之:利用Throttling提高服务器性能                 maxReceivedMessageSize
="92233720368">
WCF学习之:利用Throttling提高服务器性能                    
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="963840000"
WCF学习之:利用Throttling提高服务器性能                        maxBytesPerRead
="4096" maxNameTableCharCount="16384" />
WCF学习之:利用Throttling提高服务器性能                
</binding>
WCF学习之:利用Throttling提高服务器性能            
</basicHttpBinding>
WCF学习之:利用Throttling提高服务器性能        
</bindings>
WCF学习之:利用Throttling提高服务器性能        
<client>
WCF学习之:利用Throttling提高服务器性能            
<endpoint address="http://localhost:8732/Design_Time_Addresses/WcfServiceLibrary1/Service1/" binding="basicHttpBinding" bindingConfiguration="throttlingBinding"
WCF学习之:利用Throttling提高服务器性能              contract
="Tloner.Throttling.WcfServiceLibrary1.IService1" name="throttling" />
WCF学习之:利用Throttling提高服务器性能        
</client>
WCF学习之:利用Throttling提高服务器性能    
</system.serviceModel>
WCF学习之:利用Throttling提高服务器性能
</configuration>

我们来看看运行结果:
WCF学习之:利用Throttling提高服务器性能
我们可以看到每个资源都是catch-->using-->release,资源释放之前不会被cactht和using.

也许有考虑欠周到的地方,欢迎大家给点意见,共同研究

源码下载:download

转载于:https://www.cnblogs.com/tloner/archive/2008/04/17/1158437.html

相关文章: