我一直在玩弄 .NET 4.0 中的 Parallel 库。最近,我为我们的大型系统之一必须使用的一些不寻常的读/写操作开发了一个自定义 ORM。这允许我用属性装饰一个对象,并通过反射确定它必须从数据库中提取哪些列,以及它必须在写入时输出哪些 XML。
因为我设想这个包装器可以在许多项目中重用,所以我想尽可能地加快速度。该库主要用于 .NET Web 应用程序。我正在使用一次性控制台应用程序测试框架,以查看我创建的类。
我现在已经吸取了多线程带来的开销的教训。多线程会导致它运行得更慢。从周围阅读,这对于已经做了很长时间的人来说似乎很直观,但对我来说实际上是违反直觉的:如何同时运行一个方法 30次比顺序运行它 30 次要慢?
我认为我不会因为多个线程不得不争夺同一个共享对象而引起问题(尽管我还不够擅长它还不能确定),所以我认为减速来自开销产生所有这些线程和运行时使它们保持正常。所以:
- 虽然我主要是作为一个学习练习来做的,但这是悲观吗?对于琐碎的非 IO 任务,多线程是否过大?我的主要目标是速度,而不是 UI 或任何东西的响应能力。
- 由于线程池中已经创建了线程,在 IIS 中运行相同的多线程代码会导致它加速,而现在我正在使用控制台应用程序,我假设它是单线程的,直到我另有说明?我即将进行一些测试,但我认为我缺少一些基础知识来了解为什么它会是一种或另一种方式。我的控制台应用程序也在我的桌面上运行,具有两个内核,而用于 Web 应用程序的服务器会有更多内核,因此我可能也必须将其用作变量。