遵循操作契约构造并返回名为ObjectGraph
的反序列化数据结构。这是通过
使用登录用户检索对象ID的步骤( a )。这可确保没有两个用户获得相同的对象ID。
步骤( b )使用对象ID(来自Step a )来加载序列化对象图。
在此阶段,使用lock
在同步块中执行 a 和 b 两个步骤。这按预期工作。但是,由于性能问题,我现在想分开Step a 和 b ,因为Step b 比步骤a花费的时间更长,因此客户获得排队很容易。
是否可以在不丢失同步访问的情况下进行拆分?如果是这样,有人知道怎么做?
[ErrorBehavior(typeof(ErrorHandler))]
[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple, InstanceContextMode=InstanceContextMode.PerCall)]
public class ServiceImp : IService
{
private static object _lockOb = new object();
//ObjectGraph is a custom data structure.
public ObjectGraph GetObject(Guid IdUser)
{
lock(_lockOb) //This is to ensure that no two or more client execute below logic at any point in time.
{
//GetId method returns object id from database.
var id=GetId();
//LoadObjectGraphFromDatabase accept object id, read serialized data from database and finally returns a de-serialized ObjectGraph object.
var graph=LoadObjectGraphFromDatabase(id)
return graph;
}
}
}