相关疑难解决方法(0)

如何为Int32实现GetHashCode()?

我一直在寻找这个地方,但我找不到任何东西.任何人都可以对此有所了解吗?

.net c# clr

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

使用NoHashHasher的风险

Rust 的默认HashMap哈希器是SipHash,在某些情况下(例如,对于整数)速度要慢得多,但它提供了 HashDoS 保护。如此处所述,它NoHashHasher比默认哈希器快 50 倍,比 FNV 和 FX 哈希器快 10-20 倍(当然,并不总是如此,但在某些情况下,就像那里描述的那样)。

根据我个人的经验,我很少需要针对 HashDoS 攻击的额外保护。例如,如果我将数据库 ID 作为键,并且这些 ID 是基于自动增量的,那么我确实认为那里没有太大风险。尽管如此,我知道有充分的理由将更安全的哈希器作为默认值(安全总比后悔好)。

因此,当我们知道我们不会面临任何 HashDoS 攻击的风险并且需要使用 64 位或更小的整数作为密钥时,是否有任何理由不使用NoHashHasher?显然,性能并不总是更好,而且很明显在某些情况下它甚至可能比 FNV/FX 哈希器表现更差。我特别询问的是在链接问题中描述的情况下需要遵循的不明显的风险、缺点或特殊规则,在这些情况下,很明显NoHashHasher表现出出色的性能。

performance hashmap rust

6
推荐指数
0
解决办法
1245
查看次数

Rust 函数与 Python 函数一样慢

我正在尝试使用 Rust 来加速 Python 程序,而我对这门语言完全是初学者。n我编写了一个函数,用于计算较大字符串中每个可能的长度字符串的出现次数。例如,如果主字符串是"AAAAT"and n=3,则结果将是 hashmap {"AAA":2,"AAT":1}。我使用 pyo3 从 Python 调用 Rust 函数。Rust函数的代码是:

fn count_nmers(seq: &str, n: usize) -> PyResult<HashMap<&str,u64>> {
    let mut current_pos: usize = 0;
    let mut counts: HashMap<&str,u64> = HashMap::new();
    while current_pos+n <= seq.len() {
        //print!("{}\n", &seq[current_pos..current_pos+n]);
        match counts.get(&seq[current_pos..current_pos+n]) {
            Some(repeats) => counts.insert(&seq[current_pos..current_pos+n],repeats+1),
            None => counts.insert(&seq[current_pos..current_pos+n],1)
        };
        current_pos +=1;
    }
    //print!("{:?}",counts)
    Ok(counts)
}
Run Code Online (Sandbox Code Playgroud)

当我对n( n<10) 使用较小的值时,Rust 比 Python 快一个数量级,但随着 n 长度的增加,差距趋于零,两个函数的速度相同n=200。(见图) 不同 n 聚体长度的计数时间(Python 黑、铁锈红) …

python rust

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

标签 统计

rust ×2

.net ×1

c# ×1

clr ×1

hashmap ×1

performance ×1

python ×1