我想编写一个程序,它可以直观地说明volatile关键字的行为.理想情况下,它应该是一个程序,它执行对非易失性静态字段的并发访问,并因此而获得不正确的行为.
在同一程序中添加volatile关键字应该可以解决问题.
那是我无法实现的.即使尝试多次,启用优化等,我总是会在没有'volatile'关键字的情况下获得正确的行为.
你对这个话题有什么看法吗?你知道如何在一个简单的演示应用程序中模拟这样的问题吗?它取决于硬件吗?
我的问题与命令模式有关,我们有以下抽象(C#代码):
public interface ICommand
{
void Execute();
}
Run Code Online (Sandbox Code Playgroud)
让我们来看一个简单的具体命令,它旨在从我们的应用程序中删除一个实体.Person例如,一个实例.
我会有一个DeletePersonCommand实现的ICommand.此命令需要Person删除作为参数,以便在Execute调用方法时将其删除.
管理参数化命令的最佳方法是什么?在执行参数之前如何将参数传递给命令?
我有一个基本网址:
http://my.server.com/folder/directory/sample
Run Code Online (Sandbox Code Playgroud)
还有一个相对的:
../../other/path
Run Code Online (Sandbox Code Playgroud)
如何从中获取绝对URL?使用字符串操作非常简单,但我想以安全的方式使用Uri类或类似的东西.
它适用于标准的C#应用程序,而不是ASP.NET应用程序.
如果您分析使用的简单客户端应用程序SocketAsyncEventArgs,您将注意到Thread并ExecutionContext分配.
分配的来源是SocketAsyncEventArgs.StartOperationCommon使用创建ExecutionContext的副本ExecutionContext.CreateCopy().
ExecutionContext.SuppressFlow似乎是抑制这种分配的好方法.但是,此方法本身将在新线程中运行时生成分配.
我该如何避免这些分配?
考虑这种不可变类型:
public class Settings
{
public string Path { get; private set; }
[ContractInvariantMethod]
private void ObjectInvariants()
{
Contract.Invariant(Path != null);
}
public Settings(string path)
{
Contract.Requires(path != null);
Path = path;
}
}
Run Code Online (Sandbox Code Playgroud)
这里要注意两件事:
Path财产永远不会nullpath参数值以遵守先前的合约不变量此时,Setting实例永远不会拥有null Path属性.
现在,看看这种类型:
public class Program
{
private readonly string _path;
[ContractInvariantMethod]
private void ObjectInvariants()
{
Contract.Invariant(_path != null);
}
public Program(Settings settings)
{
Contract.Requires(settings != null);
_path = settings.Path;
} // <------ "CodeContracts: …Run Code Online (Sandbox Code Playgroud) 想象一下以下类型:
public struct Account
{
public int Id;
public double Amount;
}
Run Code Online (Sandbox Code Playgroud)
IList<Account>在C#2.0中同步两个的最佳算法是什么?(没有linq)?
第一个列表(L1)是引用列表,第二个列表(L2)是根据第一个列表同步的列表:
ID标识帐户.找到一个天真的工作算法并不难,但我想知道是否有一个智能解决方案来处理这种情况而不会破坏可读性和性能.
编辑:
在我拥有的应用程序中,Convert.ChangeType为了将值转换为动态加载类型,我正在进行频繁的调用.
然而,在使用ANTS进行分析后,我发现这Convert.ChangeType似乎占用了相当长的一部分时间(由于被频繁调用).有没有人有更快的替代方法呢?
此时我有一个包含目标的类型对象,以及一个string包含该值的对象.
以下是违规代码.我正在考虑在类型上做一个switch语句(因为它是一个有限的类型集合)并调用解析方法,虽然我不确定它是否会更快.
if(attributeRow["Value"]!=DBNull.Value)
sample[attr] = attr.AttributeType == typeof(Guid)
? new Guid(attributeRow["Value"].ToString())
: (IComparable)Convert.ChangeType(attributeRow["Value"],attr.AttributeType);
Run Code Online (Sandbox Code Playgroud) 我正在使用protobuf-net,我正在尝试:
这分别很容易使用:
protogen.exe 工具Serializer<T>.GetProto() 方法但问题是我需要支持protobuffer 自定义选项,但它似乎并不像我那样简单.
让我解释:
基本上,给出:
message person {
option (my_message_option) = true;
optional string firstname = 1 [(my_field_option) = 42];
optional string lastname = 2 [(my_field_option) = 12];
optional int age = 3;
}
Run Code Online (Sandbox Code Playgroud)
我想生成:
[ProtoContract, MyMessageOption(true)]
public class Person
{
[ProtoMember(1), MyFieldOption(42)]
public string Firstname;
[ProtoMember(2), MyFieldOption(12)]
public string Firstname;
[ProtoMember(3)]
public string Firstname;
}
Run Code Online (Sandbox Code Playgroud)
......反之亦然.
备注:
my_message_option和
my_field_option)已经存在于protofile中(例如,my_custom_options.proto),自定义属性类也可以存在于某个地方(MyMessageOptionAttribute和
MyFieldOptionAttribute).我想要进行以下设置:
class Descriptor
{
public string Name { get; private set; }
public IList<Parameter> Parameters { get; private set; } // Set to ReadOnlyCollection
private Descrtiptor() { }
public Descriptor GetByName(string Name) { // Magic here, caching, loading, parsing, etc. }
}
class Parameter
{
public string Name { get; private set; }
public string Valuie { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
从XML文件加载后,整个结构将是只读的.我想这样做,只有Descriptor类可以实例化一个参数.
一种方法是创建一个IParameter接口,然后Parameter在Descriptor类中使类成为私有,但在实际使用中,Parameter将有几个属性,我想避免重新定义它们两次.
这有点可能吗?
c# ×10
.net ×5
algorithm ×1
allocation ×1
asyncsocket ×1
c#-3.0 ×1
class ×1
list ×1
optimization ×1
path ×1
protobuf-net ×1
resharper ×1
sockets ×1
url ×1
volatile ×1