我有一个 ASP.NET Web 应用程序,它在 5-6 个搜索服务中使用 30-40 个不同的搜索索引(各种客户端处于不同的定价层)。
目前,我正在编组一个ISearchServiceClient的新实例,然后是根据进行调用的客户端所需的特定索引的适当ISearchIndexClient实例。
为了提高性能,我正在考虑在应用程序启动时编组所有ISearchIndexClients并将它们放入 Dictionary 对象中:
public static Dictionary<String, SearchIndexClient> SearchIndexes;
以便可以直接从静态字典中调用任何特定索引并像这样使用:
SearchIndexes["IndexName"].Documents.Search(searchText, searchParameters);
我希望这将加快查询和索引更新时间,尤其是在“热”索引上。我担心这可能会引入内存泄漏、性能问题和其他未知数。
我没有看到任何使用静态可用的SearchServiceClient或SearchIndexClient的示例,所以我对这种方法的前进有点不安。我对社区的问题是:
- 我的计划合理吗?
- 它真的会提高性能吗?
- 有什么缺点或影响(如果有的话?)
- 如果索引的数量随着时间的推移而增加(例如增加到 60-70),那么我会开始看到缺点吗?
将SearchServiceClients编组到字典中并根据需要从那里连接到适当的SearchIndexClient是否更有意义,如下所示:
public static Dictionary<String, SearchServiceClient> SearchServices; var searchIndexClient = SearchServices["ServiceName"].Indexes.GetClient("IndexName"); searchIndexClient.Documents.Search(searchText, searchParameters);