小编Har*_*rry的帖子

C#列为字典键

我有一个由List键入的字典:

private Dictionary<List<custom_obj>, string> Lookup;
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用ContainsKey,但它似乎没有工作,我不知道为什么.以下是我的Visual Studio立即窗口的调试信息:

?Lookup.Keys.ElementAt(7)[0]
{custom_obj}
    Direction: Down
    SID: 2540
?Lookup.Keys.ElementAt(7)[1]
{custom_obj}
    Direction: Down
    SID: 2550
searchObject[0]
{custom_obj}
    Direction: Down
    SID: 2540
searchObject[1]
{custom_obj}
    Direction: Down
    SID: 2550
?Lookup.ContainsKey(searchObject)
false
Run Code Online (Sandbox Code Playgroud)

在我的常识中,最后一个ContainsKey应该是真的.希望我在这里包含了足够的信息......任何想法?

谢谢!

c# dictionary list containskey

18
推荐指数
2
解决办法
9644
查看次数

最高效的高性能服务器套接字/线程设计

我正在构建一个极其高性能的企业软件,它将接收,处理和响应每秒超过50,000个TCP请求.这将分布在许多Amazon EC2服务器上,但我想让一台服务器能够每秒处理数千个请求(以5k /秒的速度拍摄).我很可能会使用运行Amazon Linux的m1.xlarge实例.

我正在使用Boost ASIO在C++中构建这个软件,我正在尝试找出构建套接字处理的最有效方法.在示例中(http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/examples.html)我倾向于模拟"HTTP Server 2",因为我们将有多个vCPU到雇员.

有人真的可以描述每个HTTP服务器示例的优缺点,并处理这么多连接,我真的很感激任何额外的见解(关于Boost套接字和/或高吞吐量EC2配置).

非常感谢!

c++ sockets boost amazon-ec2 boost-asio

18
推荐指数
2
解决办法
1万
查看次数

为Redshift查询优化大IN条件

我有一个~2TB完全真空的Redshift表,带有一个distkey phash(高基数,数亿个值)和复合排序键(phash, last_seen).

当我做一个查询,如:

SELECT
    DISTINCT ret_field
FROM
    table
WHERE
    phash IN (
        '5c8615fa967576019f846b55f11b6e41',
        '8719c8caa9740bec10f914fc2434ccfd',
        '9b657c9f6bf7c5bbd04b5baf94e61dae'
    )
AND
    last_seen BETWEEN '2015-10-01 00:00:00' AND '2015-10-31 23:59:59'
Run Code Online (Sandbox Code Playgroud)

它很快就会返回.但是,当我将哈希数增加到10以上时,Redshift会将IN条件从一堆OR转换为数组,符合http://docs.aws.amazon.com/redshift/latest/dg/r_in_condition.html#r_in_condition-优化换大的,名单

问题是,当我有几十个phash值时,"优化"查询从不到一秒的响应时间变为超过半小时.换句话说,它停止使用sortkey并进行全表扫描.

知道如何防止这种行为并保留使用sortkeys来保持查询的快速性吗?

这是EXPLAIN<10个哈希和> 10个哈希之间的区别:

少于10(0.4秒):

XN Unique  (cost=0.00..157253450.20 rows=43 width=27)
    ->  XN Seq Scan on table  (cost=0.00..157253393.92 rows=22510 width=27)
                Filter: ((((phash)::text = '394e9a527f93377912cbdcf6789787f1'::text) OR ((phash)::text = '4534f9f8f68cc937f66b50760790c795'::text) OR ((phash)::text = '5c8615fa967576019f846b55f11b6e61'::text) OR ((phash)::text = '5d5743a86b5ff3d60b133c6475e7dce0'::text) OR ((phash)::text = '8719c8caa9740bec10f914fc2434cced'::text) OR ((phash)::text = '9b657c9f6bf7c5bbd04b5baf94e61d9e'::text) OR ((phash)::text = …
Run Code Online (Sandbox Code Playgroud)

database postgresql amazon-web-services postgresql-performance amazon-redshift

9
推荐指数
1
解决办法
1459
查看次数

C++ Boost.ASIO async_read_until很慢

我有一个不寻常的问题.我有一个C++ Boost.ASIO Web服务器,并处理传入的请求我正在使用此代码:

boost::asio::async_read_until(
    socket_,
    response_,
    "\r\n\r\n",
    boost::bind(
            &connection::handle_read_headers,
            shared_from_this(),
            boost::asio::placeholders::error,
            boost::asio::placeholders::bytes_transferred
    )
);
Run Code Online (Sandbox Code Playgroud)

(其中"socket_"是我的boost :: asio :: ip :: tcp :: socket和"response_"是一个boost :: asio :: streambuf)

我试图抓住请求的标题,然后我再做一次async_read_until,其transfer_exactly匹配从请求标头解析的"Content-Length".问题是上面的代码在一个非常现代的服务器上返回100-900ms(从该读取块,直到调用handle_read_headers()).传入的请求如下所示:

POST /load HTTP/1.1
host: www.mysite.com
Accept: */*
Accept-Encoding: gzip,deflate
Content-type: application/x-www-form-urlencoded
From: googlebot(at)googlebot.com
Origin: http://www.mysite.com
Referer: http://www.mysite.com/another-page/
User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
X-Forwarded-For: 66.249.75.103
X-Forwarded-Port: 80
X-Forwarded-Proto: http
Content-Length: 287
Connection: keep-alive

and-the-actual-content-is-here.... (287 bytes worth)
Run Code Online (Sandbox Code Playgroud)

标题似乎以\ r \n \n \n \n结尾,并且它在读取EOF之前触发了handle_read_headers()函数(因此它不会读取整个页面) - 它实际上正在使正则表达式跳闸.这些请求来自谷歌,所以我非常有信心它不会落后于他们.

有什么我可以忽略的,为什么它需要这么长时间才能回来?我可能错过了使用aync_read_until的任何其他捕获?

谢谢!

编辑/更新:好的,现在我很困惑.在尝试兆字节的建议时,我从streambuf切换到字符数组(没有运气),然后我重构我的代码以使用async_read_some而不是async_read_until,并且只需手动扫描分隔符.我还将所有操作系统变量(sysctrl.conf)重置为骨骼默认值(以缩小可能性).不幸的是,我仍然看到以下代码中的100-900ms延迟来自使用相同的传入POST请求调用handle_read():

socket_.async_read_some(
    boost::asio::buffer(response_),
    boost::bind(
        &connection::handle_read,
        shared_from_this(), …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-asio

8
推荐指数
1
解决办法
3518
查看次数

C++线程安全对象

这似乎是一个非常简单的问题,但在我的所有研究中,我都找不到一个明确的例子......

我正在尝试使用getter和setter函数构建一个可以访问私有变量的自定义类.此类将在全局范围(extern)中实例化一次,并将在我的应用程序中用作数据缓存.它将被许多线程同时使用,99%用于读取,速度非常重要.有没有办法允许并发读取只是锁定写入?(我假设没有)

我是否只是将一个范围的互斥锁作为getter和setter的第一行?或者如何设计这个看似简单的物体的最佳方法?任何例子或链接都将非常感激(我很难绕过它).

我确实编译了Boost,所以它可以使用.

对此,我真的非常感激!

c++ multithreading boost

6
推荐指数
1
解决办法
1172
查看次数

如何从 MySQLi 准备好的语句中查看呈现的(原始)查询?

我正在为我的 PHP/MySQLi 应用程序构建一个日志记录类。我显然可以记录原始准备好的语句(带有问号),但是如果不手动解析它,是否有办法查看 MySQL 中执行的实际原始查询?

谢谢!

php mysqli prepared-statement

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

升序列表排列

我试图获得列表的所有预定义长度排列,仅按升序排列.

For example, take the set:  "ABCDE"
I'd like the returning result to be:
ABC, ABD, ABE, ACD, ACE, ADE, BCD, BCE, BDE, CDE
Run Code Online (Sandbox Code Playgroud)

换句话说,"B"永远不会出现在"A"(升序)之前,但我想要满足这一要求中的每一个变化.

我不想使用LINQ,我正在试图找出实现这个的最快方法(速度是这个应用程序中的一个因素).

到目前为止,我有一个字符列表列表:

List<List<char>> Combinations;
Run Code Online (Sandbox Code Playgroud)

内部"List"将是"ABC"(每个字母为char)的组合,外部列表将是所有组合的列表.

每个结果集的长度(上例中为3)需要是动态的,所以我想我需要某种递归...我只是想不出如何实现它.

任何帮助将不胜感激!

编辑

到目前为止,这就是我所拥有的(我觉得我已经接近了......我只是无法让它真正构建最终列表(联盟不起作用 - 我使用它是不正确的?):

    private List<List<char>> AscendingPermute(List<char> InMovements, int Combinations)
    {
        List<List<char>> Ret = new List<List<char>>();

        for(int i = 0; i <= InMovements.Count - Combinations; i++)
        {
            if(Combinations <= 1){
                Ret.Add(new List<char>() {InMovements[i] });
                return Ret;
            }
            else
            {
                Ret.Union(AscendingPermute(InMovements.GetRange(1, InMovements.Count - 1), Combinations - 1));
            }
        } …
Run Code Online (Sandbox Code Playgroud)

c# algorithm recursion list permutation

3
推荐指数
1
解决办法
628
查看次数