to 那个服务是Remoting服务。请求里有个参数是数组的,而数组又是非线程安全,要确保线程安全的话就要在这个请求上加LOCK,而每个请求耗时又较长,所以性能一直提不上去,请问有什么更好的办法实现并发请求么?Sample code as follows: int[] nArray = new int[...]; lock( nArray ) { // Only one thread can access the array }
感谢Knight94(愚翁),这样做确实能保证数组的线程安全,可是,那个比较耗时的请求Remoting服务操作也要Lock里面,所以还是顺序执行请求,并不是并发请求,所以性能并没有提升。有什么办法既让数组安全,有能实现真正的并发请求服务的造作么?Sample code as follows: int[] nArray = new int[...]; lock( nArray ) { User user = obj.GetUser(nArray) //假设这个请求要250毫秒,如何让它并发请求呢?? }
to 这样做确实能保证数组的线程安全,可是,那个比较耗时的请求Remoting服务操作也要Lock里面,所以还是顺序执行请求,并不是并发请求,所以性能并没有提升。有什么办法既让数组安全,有能实现真正的并发请求服务的造作么?根据你的需求,你可以如下修改,即在访问数组的时候,进行加锁,而真正进行传送的时候,不需要加锁,这里可以用属性来完成,例如:class TestArray { private int[] nArray; public int[] Numbers { get{ lock( nArray ) { int[] nCopy = new int[...]; //Copy the array using "Array.Copy" return nCopy; } }
} }//in thread access User user = obj.GetUser( yourTestArray.Numbers );
如果是webservice它本来就需要多线访问
int[] nArray = new int[...];
lock( nArray )
{
// Only one thread can access the array
}
int[] nArray = new int[...];
lock( nArray )
{
User user = obj.GetUser(nArray) //假设这个请求要250毫秒,如何让它并发请求呢??
}
{
private int[] nArray;
public int[] Numbers
{
get{
lock( nArray )
{
int[] nCopy = new int[...];
//Copy the array using "Array.Copy"
return nCopy;
}
}
}
}//in thread access
User user = obj.GetUser( yourTestArray.Numbers );