C# / F# 性能比较

2024-03-09

网络上是否有任何 C#/F# 性能比较来显示新 F# 语言的正确用法?


自然 F# 代码(例如函数式/不可变)比自然(命令式/可变面向对象)C# 代码慢。然而,这种 F# 比通常的 C# 代码要短得多。 显然,这是一个权衡。

另一方面,在大多数情况下,您可以实现与 C# 代码相同的 F# 代码性能。这通常需要以命令式或可变的面向对象风格进行编码,分析并消除瓶颈。您使用的工具与 C# 中使用的工具相同:例如.Net 反射器和分析器。

尽管如此,了解 F# 中一些会降低性能的高效率构造是值得的。根据我的经验,我见过以下案例:

  • 引用(相对于类实例变量),仅在执行数十亿次的代码中

  • F# 比较 (

  • 尾部调用——仅在编译器或.Net 运行时无法优化的某些情况下。正如评论中所述,取决于 .Net 运行时。

  • F# 序列比 LINQ 慢两倍。这是由于引用和使用 F# 库中的函数来实现 seq<_> 的转换。这个问题很容易修复,因为您可以用具有相同签名的使用 Linq、PLinq 或 DryadLinq 的模块来替换 Seq 模块。

  • 元组,F# 元组是在堆上排序的类。在某些情况下,例如int*int 元组可能需要使用结构体。

  • 分配,值得记住的是,闭包是一个类,使用 new 运算符创建,它会记住访问的变量。可能值得“解除”闭包,或者将其替换为显式将访问的变量作为参数的函数。

  • 尝试使用内联来提高性能,尤其是对于通用代码。

我的经验是首先使用 F# 进行编码,然后仅优化重要的部分。在某些情况下,用 C# 编写慢速函数可能比尝试调整 F# 更容易。然而,从程序员效率的角度来看,在 F# 中启动/原型设计然后分析、反汇编和优化是有意义的。

最重要的是,由于程序设计决策,您的 F# 代码最终可能比 C# 慢,但最终可以获得效率。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# / F# 性能比较 的相关文章

  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • 如何使用recv()检测客户端是否仍然连接(并且没有挂起)?

    我写了一个多客户端服务器程序C on SuSE Linux 企业服务器 12 3 x86 64 我为每个客户端使用一个线程来接收数据 我的问题是 我使用一个终端来运行服务器 并使用其他几个终端来运行服务器telnet到我的服务器 作为客户端
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • ASP MVC:服务应该返回 IQueryable 的吗?

    你怎么认为 你的 DAO 应该返回一个 IQueryable 以便在你的控制器中使用它吗 不 您的控制器根本不应该处理任何复杂的逻辑 保持苗条身材 模型 而不是 DAO 应该将控制器返回给视图所需的所有内容 我认为在控制器类中看到查询 甚至
  • C 语言中 =+(等于加)是什么意思?

    我碰到 与标准相反 今天在一些 C 代码中 我不太确定这里发生了什么 我在文档中也找不到它 In ancientC 版本 相当于 它的残余物与最早的恐龙骨头一起被发现 例如 B 引入了广义赋值运算符 使用x y to add y to x
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • 当模板类不包含可用的成员函数时,如何在编译时验证模板参数?

    我有以下模板struct template
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • System.Runtime.InteropServices.COMException(0x80040154):[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 C 项目中遇到异常 System Runtime InteropServices COMException 0x80040154 检
  • 当前的 x86 架构是否支持非临时加载(来自“正常”内存)?

    我知道有关此主题的多个问题 但是 我没有看到任何明确的答案或任何基准测量 因此 我创建了一个处理两个整数数组的简单程序 第一个数组a非常大 64 MB 第二个数组b很小 无法放入 L1 缓存 程序迭代a并将其元素添加到相应的元素中b在模块化
  • 结构体指针的动态数组

    我必须使用以下代码块来完成学校作业 严格不进行任何修改 typedef struct char firstName char lastName int id float mark pStudentRecord pStudentRecord
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder

随机推荐

  • 从 C# 调用 NetValidatePasswordPolicy 始终返回密码必须更改

    我们有一个使用 Active Directory 来验证用户身份的 mvc 应用程序 我们正在利用System DirectoryServices并使用PricipalContext验证 principalContext ValidateC
  • 如何在 OS 10.6 (Snow Leopard) 上解决此 PostgreSQL 错误

    我按照以下说明设置 postgresql这个网站 http www robbyonrails com articles 2010 02 08 installing ruby on rails passenger postgresql mys
  • 输入图像中的通道数无效

    我在运行程序时收到错误 我特别考虑了 OpenCV 库中的颜色操作 我正在尝试构建一个程序 从 Raspberry Pi 摄像头获取视频并对其进行分析 我想找到视频中最亮的点 并计算该点距视频源中心的距离和角度 我正在做的项目将相机指向一个
  • GTK焦点链

    Currently I m working on a pyGTK3 application for which I want to set the focus chain When using the code below simplifi
  • 将一个系列分配给 Pandas DataFrame 的几行

    我有一个用索引和列准备的 pandas DataFrame 所有值都是 NaN 现在我计算了一个结果 该结果可用于 DataFrame 的多行 并且我想一次将它们全部分配 这可以通过循环来完成 但我很确定这个分配可以一次完成 这是一个场景
  • 如何在给定解决方案中评估在与用于生成上述解决方案的模型不同的模型中声明的谓词

    假设我们有两个模块A和B A在B中打开 您从 A 生成一个解决方案 并在 B 中有一些参数化谓词 这些谓词仅对 A 的元素进行推理 但由于某些原因 您不能将这些谓词放入模块 A 中 如何在 A 生成的解决方案中评估 B 中声明的谓词 以下是
  • 未找到与团队 ID“*****”和私钥匹配的“iOS 开发”签名证书

    我已经创建了一个新的配置开发证书 但 xcode 不接受它 并显示错误 找不到与团队 ID 匹配的 iOS Development 签名证书和私钥 如何解决这个错误 有时 即使您有有效的证书 Xcode 也会抛出此错误 这是因为您的帐户以某
  • 如何以二进制形式打印长整型?

    我正在尝试以二进制形式打印 Long 但它总是被切断0的 有没有办法强制它显示所有位 这是我的代码 long l 1 System out println Long toBinaryString long l 仅按提及的方式返回1由于删除了
  • 无法找到属性 - 从 NHibernate 3 切换到 3.3.1 后出现异常

    我有一个带有字段的类 protected DateTime insertDate 这是该字段的映射
  • 最佳拟合散点图线

    我正在尝试在 matlab 中用最适合的线绘制散点图 我可以使用 scatter x1 x2 或 scatterplot x1 x2 获得散点图 但基本拟合选项被遮蔽并且 lsline 返回错误 未找到允许的线型 什么也没做 任何帮助都会很
  • 验证 SSL/X.509 证书是否由另一个证书签名

    Question 如何使用 PyOpenSSL 或 Twisted 验证 X 509 证书是否由另一个证书签名 我希望客户端验证收到的服务器证书是否是签署其客户端证书的证书 我浏览了 PyOpenSSL 文档 似乎找不到任何关于如何与建立
  • 无法在 Golang 中的 GET 请求标头中传递 Bearer 令牌

    我正在使用 oauth2 访问第三方 API 我可以正常获取访问令牌 但是当我尝试通过在请求标头中传递不记名令牌来调用 API 时 会出现 401 未经授权 错误 尽管当我尝试通过 POSTMAN 通过将标头传递为 Authorizatio
  • 屏蔽张量的损失

    假设我有像这样的 logits 4 3 0 5 2 7 0 0 0 5 2 3 0 0 0 显然 第一个示例中的最后两个和第二个示例中的最后三个被屏蔽 即它们为零 并且不应影响损失和梯度计算 如何计算此 logits 和相应标签之间的交叉熵
  • 如何检查打字稿中的数组列表中是否有重复项?

    您好 目前我的打字稿代码中有一个这样的数组 我如何检查数组中是否有一个项目出现两次 我希望创建函数 如果传递的数组包含重复元素 它将返回 true 或 false let tagonTypes Array
  • 为什么不使用base128? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动
  • 从 Exif 数据计算照度

    我如何通过iPhone相机计算勒克斯或照度 我已经计算了所有exif数据 如下所示 key FocalLength value 3 85 key MeteringMode value 5 key ShutterSpeedValue valu
  • 具有固定页眉的真正粘性页脚?

    首先 请阅读整个问题 以便您能够充分理解我在寻找什么 谢谢 这是我长期以来一直在尝试研究的一个问题 并且困扰了我一段时间 我可以有一个真正的粘性页脚和固定页眉吗 如何实现带有固定页眉的粘性页脚 我无法向正文或内容添加填充或边距 因为这会破坏
  • Node.js Busboy 分别解析字段和文件

    我想知道是否可以让 Busboy 分别解析字段和文件 我已经删除了bodyParser因为您可以很容易地用临时文件填充硬盘 例如 解析器发布字段的中间件 用于所有 POST 请求 if req method POST var form ne
  • Javascript - 如何替换子字符串?

    这是一个简单的问题 我想使用 Javascript 在客户端将一个子字符串替换为另一个子字符串 原始字符串是 original READ ONLY 我想更换 READ ONLY with READ WRITE 请问有什么快速答复吗 可能有一
  • C# / F# 性能比较

    网络上是否有任何 C F 性能比较来显示新 F 语言的正确用法 自然 F 代码 例如函数式 不可变 比自然 命令式 可变面向对象 C 代码慢 然而 这种 F 比通常的 C 代码要短得多 显然 这是一个权衡 另一方面 在大多数情况下 您可以实