问题标签 [system.memory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
23690 浏览

c# - 跨度有什么区别和记忆在 C# 7.2 中?

C# 7.2 引入了两种新类型:它们比早期的 C# 类型(Span<T>如.Memory<T>string[]

问题:Span<T>和 和有什么不一样Memory<T>?为什么我要使用其中一个?

0 投票
1 回答
816 浏览

c# - Span可以让哪些常见操作更高效?

假设我有一个 Web 应用程序,我想利用新Span<T>类型来降低 GC 压力并提高性能。

我应该注意哪些模式?.NET 团队在实现此新功能时是否考虑过任何典型操作?

0 投票
1 回答
1159 浏览

c# - 只读结构在数组中是否应该是不可变的?

(注意:此示例代码需要 C# 7.2 或更高版本,以及Nuget System.Memory包。)

假设我们有一个readonly struct如下:

现在让我们把它放到一个数组中:

到目前为止,一切都很好。您不能编写代码array[0].Value直接修改。

现在假设我们这样做:

所以现在我们已经修改Value了数组中只读结构的组件。

这种行为正确吗?

0 投票
1 回答
1664 浏览

c# - 通过 Span 实现子字符串

什么时候应该利用一个SubstringFromStart方法的实现会是什么样子?Span<T>假设substringLength <= input.Length

这是要走的路吗?有没有比 更好、更简洁的方法new string(span.ToArray())

0 投票
1 回答
1260 浏览

c# - 替代使用 Func 返回 Span或其他参考结构

如何将返回 Span 的方法作为参数传递?

此代码返回错误“类型 'Span' 可能不用作类型参数”(这是有道理的,因为使用 ref 结构作为泛型类型参数可能导致装箱,因此被禁止)。

0 投票
3 回答
771 浏览

c# - 跨度不需要局部变量赋值。这是一个特点吗?

我注意到即使未初始化局部变量,以下内容也会编译和执行。这是 Span 的一个特性吗?

0 投票
1 回答
1741 浏览

c# - 跨度不能是嵌套的局部变量。为什么这是一个限制?

以下不编译。既然这不是匿名方法、lambda 表达式或查询表达式,为什么这是一个限制?(将文本作为参考 ReadOnlySpan 工作正常。)

0 投票
1 回答
725 浏览

c# - 跨度和不在 .NET Native UWP 应用程序中工作的朋友

重现步骤:

  1. 打开带有最新更新的 Visual Studio 2017。
  2. 在 10240 中创建一个 UWP 项目(这不是强制性的,它在所有版本中都已损坏)
  3. System.Memory从 nuget 包安装(单击包含预发行版)
  4. 将此代码复制粘贴到 MainPage.cs

    /li>
  5. 将此复制粘贴到 MainPage.xaml

    /li>
  6. 从 Debug 切换到 Release x64 并确保“使用 .Net Native 工具链编译”。

  7. 单击播放。

  8. 收到此错误:

------ 构建开始:项目:App12,配置:Release x64 ------
App12 c:\Users\myuser\documents\visual studio 2017\Projects\App12\App12\bin\x64\Release\App12 .exe
处理应用程序代码
C:\Users\myuser.nuget\packages\microsoft.net.native.compiler\1.7.3\tools\Microsoft.NetNative.targets(697,5): error : Internal compiler error: Object reference not设置为对象的实例。
========== 构建:0 成功,1 失败,0 最新,0 跳过 ==========
========= 部署:0成功,0失败,0跳过==========

我做错了什么?这适用于没有 .NET Native 的调试和发布。谢谢。

0 投票
1 回答
715 浏览

c# - 获取内存可变结构的正确方法/ 跨度?

对于网络协议实现,我想利用 newMemorySpan类来实现缓冲区的零拷贝,同时通过struct.

我有以下人为的例子:

结果是buffer填充了7, 6, 5, 4, 3, 2, 1,这是所需的,但我很难想象这MemoryMarshal.Cast是唯一的方法(禁止任何需要unsafe关键字的内容)。我尝试了其他一些方法,但我不知道如何将它们与 a ref struct(不能用作泛型类型参数)或如何获取实际缓冲区中的结构而不是副本(在所做的任何突变都不会反映在缓冲区中)。

有没有更简单的方法从缓冲区中获取这个可变结构?

0 投票
2 回答
5184 浏览

c# - 使用 ReadOnlySpan 处理转义序列

据说ReadOnlySpan<char>它非常适合解析,所以我尝试使用它,但遇到了一个我不知道如何处理的用例。


我有一个命令行string,其中参数前缀-和分隔符(空格)被转义(我知道我可以在这里引用它们,但为了这个问题,让我们假设它不是一个选项)

标记器应返回以下标记:

  1. foo- 命令名称
  2. bar- 参数名称
  3. -baz qux- 参数值

案例1&2很简单,因为在这里我可以使用str.Slice(i, length),但是如何创建3rd案例并只返回一个ReadOnlySpan<char>?该Slice方法不允许我指定跳过转义字符start/length所需的多个范围。\

例子:

在哪里(10,4) = "-bar"(15,3) = " qux"

StringBuilder您可以Append稍后跳过几个字符和其他字符。我将如何获得相同的结果ReadOnlySpan<char>