使用C#和Json加速自动完成

时间:2014-03-05 09:15:19

标签: c# asp.net-mvc json

我有这个代码返回JSon以进行自动完成。

public ActionResult AutocompleteCompany(string term)
{
    var model = CacheObjects.Companies
                            .Where(x => x.CompanyName.Contains(term))
                            .Select(x => new
                            {
                                label = x.CompanyName,
                                id = x.CompanyId
                            });
    return this.Json(model, JsonRequestBehavior.AllowGet); 
}

这里存在性能问题,因为我正在新建标签和ID。 必须有另一种方法,这样做更快?

编辑 - 这可能是包含性能问题的Contains子句

1 个答案:

答案 0 :(得分:1)

由于您的关注似乎与匿名类型的开销/性能有关,因此在性能方面,匿名类型与其他普通类型类似。在幕后,CLR将它们编译为普通类型(只有一个难以形容的名称)。

见这里:Performance of anonymous types in C#

编辑:就您正在做的事情而言,从一个对象中选择一个强类型解决方案的特定属性,我看不到任何改进方法。

请在此处查看类似的问题(在使用LINQ从对象中提取多个属性方面)所提供的所有答案都使用匿名类型,因为这是首选解决方案:Select Multiple Fields from List in Linq

根据您的客户端实施,您可以做很多事情(如果您还没有),具体取决于您获得的数据(无论是数量加上更新的频率),您都可以随时当页面加载并使用Javascript查询它以获得自动完成功能时,将它全部拉入JSON对象客户端(或者您可以将其缓存到服务器端并仍然使用LINQ)。您也可以这样做,以便在输入框中的每次击键后不调用自动完成功能,而是在调用对象之前等待2秒左右。