小编Chr*_*ase的帖子

C#静态方法与对象实例

我目前正在开发一个C#MVC REST web api,我正在尝试为我们的设计选择两种可能性之一.

在不深入设计的情况下,我们打算建立一个数据访问类,我们将其称之为DataSource.每个人DataSource都需要执行小的,包含的逻辑块来正确地构建适当的响应.由于希望将来能够加载代码,我们不希望简单地将这些功能打开DataSource,而是希望它们由其他程序集提供.我们已经实现了这个概念的证明,到目前为止,这么好.

我想要决定的是使用单个静态ExecuteQuery函数编写静态类,或者编写工厂方法来创建这些类的实例,这些类具有一个名为的实例方法ExecuteQuery.

每次请求创建多个短期对象与调用静态方法之间的性能考虑因素是什么?

直观地说,静态方法会更快,但我已经预料到我会通过反射来调用它们(以支持热负载的代码要求).

如果对短命物体没有巨大的惩罚,那么他们可能会单凭简单性而获胜.

有关我们预期负载的相关信息:

  • 响应时间在300ms - 800ms范围内
  • 大约2000个Web客户端的平均负载
  • 峰值负载约4000个客户端
  • 客户端每2到5秒进行一次查询
  • 客户端峰值速率每秒1次查询

此外,每个DataSource实例最多可创建8个,平均3个实例.

c# model-view-controller static-methods factories

5
推荐指数
1
解决办法
1825
查看次数

与NEST ElasticSearch库的连接池

我目前正在使用NEST ElasticSearch C#Library与ElasticSearch进行交互.我的项目是一个MVC 4 WebAPI项目,它基本上构建了一个RESTful Web服务来访问目录服务信息.

我们刚刚开始与NEST合作,并且一直在为缺乏文档而磕磕绊绊.什么是有用的,但它有一些非常大的漏洞.目前,我们需要的一切工作,但是,我们遇到的问题是连接有时需要一整秒.我们想要做的是使用某种连接池,类似于您与SQL Server交互的方式.

以下是有关如何使用nest连接的文档:http://mpdreamz.github.com/NEST/concepts/connecting.html

以下是我们项目的相关代码段:

public class EOCategoryProvider : IProvider
{
    public DNList ExecuteQuery(Query query)
    {
        //Configure the elastic client and it's settings
        ConnectionSettings elasticSettings = new ConnectionSettings(Config.server, Config.port).SetDefaultIndex(Config.index);
        ElasticClient client = new ElasticClient(elasticSettings);

        //Connect to Elastic
        ConnectionStatus connectionStatus;
        if (client.TryConnect(out connectionStatus))
        {
            // Elastic Search Code here ...
        } // end if
    } // end ExecuteQuery
} // end EOCategoryProvider
Run Code Online (Sandbox Code Playgroud)

从查看文档,我看不到连接池的任何规定.我一直在考虑实现我自己的(有3个或4个ElasticClient对象存储,并选择它们循环风格),但我想知道是否有人有更好的解决方案.如果没有,有没有人有关于手动实现连接池的最佳方法的建议?有什么文章指向?

感谢你们提出的任何事情.

更新:这似乎与在每个请求和特定网络设置上调用TryConnect有关.当在与弹性盒子相同的网络上使用机器时,问题完全消失了; 我的开发机器(平均350毫秒到弹性盒子)似乎有时无法建立http连接,这导致了TryConnect的长时间.

c# connection-pooling elasticsearch nest

4
推荐指数
1
解决办法
4997
查看次数