小编sht*_*iha的帖子

属性有波动效应吗?

在下面的代码将read1始终等于read2,提供的属性Flag可以从其他线程更改?这里关注的是Flag可能会内联.

private bool Flag {get; set;}

public void MultithreadedMethod()
{
    var read1 = Flag;

    /* some more code */

    var read2 = Flag;    
}
Run Code Online (Sandbox Code Playgroud)

UPD:其他一些线程Flag/* some more code */执行期间可能会改变其值.在这种情况下read1应该是不同的read2.它将永远是这样吗?不会内联将属性变成一个非易失性字段,尽管事实上读取之间已经改变了,但这将导致read1等于read2Flag

c# concurrency multithreading

12
推荐指数
1
解决办法
6188
查看次数

如何获取指定主机名的DNS别名?

我想获得有关指定主机名的DNS别名的信息。我用了 :

IPHostEntry hostEntry = Dns.GetHostEntry("hostname")
Run Code Online (Sandbox Code Playgroud)

不幸的是,如MSDN中所述:

此方法未填充返回的IPHostEntry实例的Aliases属性,并且该属性始终为空。

我计划通过以下方式获取DNS别名:

  1. 在注册表中获取DNS服务器的ipAddresses SYSTEM\CurrentControlSet\Services\Tcpip\Parameter

  2. 使用DNS WMI提供程序在DNS服务器中获取CNAME记录。但是在这种情况下,需要访问DNS服务器的权限。

我的计划正确吗?是否有另一种未经DNS服务器许可即可获取CNAME记录的方法?

.net c# dns wmi

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

如何使用protobuf序列化大型嵌套数组?

我使用protobuf-net进行二进制序列化.在序列化A类时我很喜欢OutOfMemory .BinaryFormatter很好地序列化了同一个对象.

下面是类示例:

[ProtoContract]
class A:
   [ProtoMember(1, DataFormat = DataFormat.Group)]
   B[] Array1 {get; set;}
   ....

class B:
   [ProtoMember(1)]
   string Field1 {get; set;}

   [ProtoMember(2)]
   string Field1 {get; set;}

   [ProtoMember(3, DataFormat = DataFormat.Group)]
   C[] Array2 {get; set;} // 20000 elements
   ....

class C:
   [ProtoMember(1)]
   string Field1 {get; set;}

   [ProtoMember(2)]
   string Field1 {get; set;}
Run Code Online (Sandbox Code Playgroud)

serialization protobuf-net

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

标签 统计

c# ×2

.net ×1

concurrency ×1

dns ×1

multithreading ×1

protobuf-net ×1

serialization ×1

wmi ×1