小编joe*_*joe的帖子

在c#rabbitmq客户端获得"禁止请求管道"

我有一个在WCF服务中运行的RabbitMQ C#Client.

它偶尔会发现System.NotSupportedException: Pipelining of requests forbidden 异常.

c# rabbitmq

8
推荐指数
2
解决办法
3090
查看次数

数组是否在C#中写入原子?

var a = new bool[]{true,false};
var b = new bool[4];
a=b;       //operation 1
a[1]=true; //operation 2
Run Code Online (Sandbox Code Playgroud)

我知道在C#中定义了一些atmoic类型,从那里我找不到数组.

  1. 操作1类似于指针重新分配.它是否 保证是有毒的?
  2. 操作2怎么样?

c# arrays atomic

5
推荐指数
1
解决办法
275
查看次数

c# 如果span<T>(memory<T>) 引用堆栈上的缓冲区会发生什么

.NET Standard 2.1 引入了一项新功能,您可以在其中“控制”内存块而不是复制它们:SpanMemory

在文档示例中,我注意到可以引用堆栈缓冲区:

byte data = 0;
Span<byte> stackSpan = stackalloc byte[100];
for (int ctr = 0; ctr < stackSpan.Length; ctr++)
   stackSpan[ctr] = data++;
Run Code Online (Sandbox Code Playgroud)

据我所知,一个进程的堆栈内存是有限的(1MB 或 4MB),我们无法手动释放它。

所以我想创建一个Memory<T>orSpan<T>会以某种方式“固定”堆栈上的内存位置,以便我们可以索引它?但这不是可能导致堆栈溢出的堆栈泄漏的潜在情况吗?由于堆栈上的数组应该与Memory<T>or一样长Span<T>

c# memory stack-overflow .net-standard

5
推荐指数
1
解决办法
1401
查看次数

为什么我可以在 c#7.3 中将 ref 结构声明为类的成员?

根据文档

不能将 ref 结构声明为类或普通结构的成员。

但我成功地编译并运行了这个:

public ref struct RefStruct
{
    public int value;
}
public class MyClass
{
    public RefStruct Item => default;
}    
...       

MyClass c = new MyClass();
Console.WriteLine(c.Item.value);
Run Code Online (Sandbox Code Playgroud)

现在RefStruct是 aref struct并且它是一个类的成员。这种说法在某些情况下是错误的吗?

更新 现在文档已更新为更准确的描述。

.net c# struct ref-struct c#-7.3

4
推荐指数
1
解决办法
2362
查看次数