在回答之前先阅读!
我有一个RESTful服务,它包含了Entity Framework。基本上,我所做的只是创建一个数据库,在表之间添加关系,在这个数据库周围创建一个Entity模型,最后将整个事件公开为RESTful * .svc服务。这样做了,也无法改变。
现在我需要通过客户端应用程序查询数据。我所能访问的只是服务本身。我不能添加任何服务器端代码,即使我想。服务器现已锁定。
我需要从名为“ProductVoorwaarden”的表格(产品条件)中检索数据,该表格链接到其他三个表格。 (Rubriek,Categorie和Datatype。)这些数据需要以XML格式返回,其根节点名为“PRODUCTVOORWAARDEN”,并且其中的每条记录都有自己的XElement,称为“REC”。在此REC中,表中的每个字段都有一个属性,以及对相关表的引用。这是我现在的代码:
XElement PRODUCTVOORWAARDEN()
{
XElement Result = new XElement("PRODUCTVOORWAARDEN");
var Brondata = COBA.Productvoorwaarden.OrderBy(O => O.Code);
foreach (var item in Brondata)
{
COBA.LoadProperty(item, "Rubriek");
COBA.LoadProperty(item, "Categorie");
COBA.LoadProperty(item, "Datatype");
XElement REC = new XElement("REC",
Attribute("Rubriek", item.Rubriek.Code),
Attribute("Categorie", item.Categorie.Naam),
Attribute("Code", item.Code),
Attribute("Datatype", item.Datatype.Naam),
Attribute("Eenheid", item.Eenheid),
Attribute("Naam", item.Naam),
Attribute("Omschrijving", item.Omschrijving),
Attribute("UitgebreideTekstVeld", item.UitgebreideTekstVeld),
Attribute("Veld", item.Veld)
);
Result.Add(REC);
}
return Result;
}
此代码工作正常,但速度很慢。它读取所有ProductVoorwaarden记录,但是它必须再次为服务器进行往返,以便每个记录检索Rubriek.Code,Categorie.Naam和Datatype.Naam。 (在数据库中,这些关系由自动增量标识字段设置,但XML代码使用Code或Naam作为参考。)
你可以想象,每次返回RESTful服务只会占用更多时间,我正试图避免。那么有没有什么方法可以在客户端更快地加速这一切?
<小时/> 服务器仍处于开发阶段,下一个版本将需要几个月的时间。因此,我必须处理服务器现在提供的选项。 如果没有修改服务器就没办法加快速度,那就好了。至少我试过了。还有35个表需要在几天内按期限处理,所以如果它有效,那么它可以工作。
答案 0 :(得分:1)
您可以使每个COBA.LoadProperty调用异步并且并行运行它们而不是按顺序运行它们。它将使您的客户端代码更加复杂,因为您必须处理每个异步调用的返回并确定它们何时完成并且您已准备好构建XML。假设您的4个REST呼叫中的每个呼叫都花费相同的时间来将延迟减少一半。
你可能已经仔细检查了但是我遇到过从lambda表达式生成枚举器的情况可能很昂贵。仍然只有几百毫秒,我得到的印象是你的延迟大于此。值得一试。