gpt4 book ai didi

multithreading - C# 如何最大限度地提高特定代码部分没有上下文切换的机会?

转载 作者:行者123 更新时间:2023-12-02 00:39:40 25 4
gpt4 key购买 nike

我的应用程序中有一段时间紧迫的代码。我将运行它的线程设置为最高优先级 - 这是我能做的最多的事情。

对于如何使在该线程中运行的部分代码尽可能少地被中断(较少发生上下文切换),有什么建议吗?

代码并不复杂。我用内联代码替换了所有方法调用,并且我没有使用任何高级代码(比如没有 LINQ)。大多数运算都是算术运算。只有一个字符串比较(我正在考虑如何摆脱它)。一半的数学是整数,一半是 double 。

代码是 x86 .NET 4 C#。在单个 Xenon X3450 W2008R2 上运行。单一应用服务器。

(不幸的是,数据来自不支持 x64 的 3d 方 API(讨厌它!))

我很乐意与经验丰富的开发人员进行成熟的讨论。

附言服务器没有页面文件,因此也不会发生硬页面错误(没有不需要的 IO 操作)。

最佳答案

在上下文切换方面,您唯一需要担心的就是阻塞您的线程。所以使用 LINQ 应该没有问题(即 LINQ-to-objects,显然是 LINQ-to-SQL 或任何涉及阻塞的东西!)。任何类型的算术或调用方法等也不会阻塞线程,因此对上下文切换没有影响。

如您所述,影响上下文切换的另一件事是优先级。但不仅仅是线程优先级,还有你的进程的优先级。您可以使用 SetPriorityClass将进程的优先级提高到 ABOVE_NORMAL_PRIORITY_CLASS(我不会费心把它设置得比这更高),然后将线程的优先级也设置为 Above Normal。

但是,一般来说,优先级仅在涉及时间(即确保您的进程响应外部输入(网络、用户输入、磁盘 I/O))时真正有用尽可能快)。它实际上对线程的实际吞吐量影响很小,除非您同时运行其他受 CPU 限制的进程。但如果真是这样,那么摆弄优先级无论如何都不是一个可行的长期解决方案。这是因为您会发现,通过将其中一个进程设置为更高的优先级,它会完全耗尽其他进程,它们将永远不会运行。

所以无论如何,在调整线程和进程优先级之前,我会仔细考虑事情。而且,一如既往,测试,测试,测试!

关于multithreading - C# 如何最大限度地提高特定代码部分没有上下文切换的机会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3077501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com