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