在下面的代码将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
我想获得有关指定主机名的DNS别名的信息。我用了 :
IPHostEntry hostEntry = Dns.GetHostEntry("hostname")
Run Code Online (Sandbox Code Playgroud)
不幸的是,如MSDN中所述:
此方法未填充返回的IPHostEntry实例的Aliases属性,并且该属性始终为空。
我计划通过以下方式获取DNS别名:
在注册表中获取DNS服务器的ipAddresses SYSTEM\CurrentControlSet\Services\Tcpip\Parameter。
使用DNS WMI提供程序在DNS服务器中获取CNAME记录。但是在这种情况下,需要访问DNS服务器的权限。
我的计划正确吗?是否有另一种未经DNS服务器许可即可获取CNAME记录的方法?
我使用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)