c# - .NET Generic 集合在多线程环境中是否更慢

标签 c# .net multithreading generics thread-synchronization

几天前,我参加了股票公司的 c#.net 开发人员面试,他们的应用程序必须在几秒钟内频繁更新。因此,面试官告诉我,在 List、Stack、Dictionary 等 .NET 通用集合上获取锁或提供线程同步非常慢。所以,他们使用他们的自定义集合。 所以,我想知道“.net 集合在获取锁和释放锁时是否真的很慢,即使它们很慢,那么我们如何通过编写自定义泛型类来提高性能”

最佳答案

泛型和多线程彼此无关。鉴于此,我不确定您在问什么。

Are .net collection really slow?

...无法回答,因为性能是相对的。

how we can improve that performance by writing custom generic classes

你不能,因为泛型与此无关。您可以通过编写根据应用程序的特定需求量身定制的自定义集合来提高性能。这是一个好主意的情况很少见,但它可以。例如,很容易创建一个比内置 List<T> 更快的类.取List<T>作为模板并删除所有迭代器版本控制逻辑以消除一些开销。这种小小的胜利很少值得付出代价。

如果您需要建议:尝试使用内置集合。有一个System.Collections.Concurrent同步的命名空间。

鉴于我们掌握的信息,无法判断您的面试官构建自定义集合是对还是错。

my question is that why lock is slower on .NET Collection

您只能使用 lock使用.NET,所以我不确定你在这里问什么。另外:比什么慢?

is there any way to achieve synchronization with mutable objects in a more faster way than what lock provides?

通常,这是可能的。如何做到这一点完全取决于具体情况。如果有一个通用的方法来做什么lock确实,但比我们不需要的要快 lock首先。

我试图通过收集您提出的所有不同问题并加以解决来帮助您。我想如果你问的问题更少、更精确,你就会自己找到答案,或者认识到有些问题没有多大意义。提出正确的问题通常会得到答案。

关于c# - .NET Generic 集合在多线程环境中是否更慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22733657/

相关文章:

c# - 在没有第二个线程的帮助下异步执行代码?

c# - 从c#中的字符串中提取最后一个匹配项

.net - 是否有常用的不符合 CLS 的 .NET 语言?

Python 的多处理池没有预期的那么高效

c# - 单行 VB.NET 公共(public)属性

c# - netduino 2 上的按钮事件

c# - 如果没有应用程序回收,在 ASP.NET 中使用后台 worker 有好处吗?

c# - 通过传递简单和复杂的参数来调用 web api

c# - c#中字符串比较的更快算法

c# - C#中的AES CTR解密