我正在寻找利用GPU来处理一些方程式,但不知道如何从C#中访问它。 我知道XNA和DirectX框架允许您使用着色器来访问GPU,但是如何在没有这些框架的情况下访问它?
危险…史密斯博士危险…前面的哲学职位 这篇文章的目的是为了确定是否将validation逻辑放在我的域实体之外(实际上是聚合根)实际上给了我更多的灵活性,或者它是kamikaze代码 基本上我想知道是否有更好的方法来validation我的域实体。 这是我打算这样做,但我希望你的意见 我考虑的第一个方法是: class Customer : EntityBase<Customer> { public void ChangeEmail(string email) { if(string.IsNullOrWhitespace(email)) throw new DomainException(“…”); if(!email.IsEmail()) throw new DomainException(); if(email.Contains(“@mailinator.com”)) throw new DomainException(); } } 我实际上不喜欢这个validation,因为即使当我将validation逻辑封装在正确的实体中时,这违反了打开/closures原则(打开以进行扩展,但是closures以进行修改),并且我发现违反这个原则,代码维护变成当应用程序复杂化时,真正的痛苦。 为什么? 由于领域规则的变化比我们想要承认的要多,而且如果规则隐藏在这样一个实体中,他们很难testing,很难阅读,很难维护,但是为什么我不喜欢这个方法是:如果validation规则改变,我必须来编辑我的域实体。 这是一个非常简单的例子,但在RL中validation可能会更复杂 所以遵循Udi Dahan的哲学, 明确的angular色以及Eric Evans在蓝皮书中的build议,接下来的尝试是实现规范模式,像这样 class EmailDomainIsAllowedSpecification : IDomainSpecification<Customer> { private INotAllowedEmailDomainsResolver invalidEmailDomainsResolver; public bool IsSatisfiedBy(Customer customer) { return !this.invalidEmailDomainsResolver.GetInvalidEmailDomains().Contains(customer.Email); } } 但是后来我意识到,为了遵循这种方法,我必须首先对实体进行变异,以便传递被赋值的值 […]
我正在寻找在c#中实现协程(用户调度线程)的方法。 当使用C ++时,我正在使用光纤。 我在互联网上看到光纤不存在于C#中。 我想获得类似的function。 有没有什么“正确”的方式来实现在c#中的协程? 我曾经想过使用线程来实现这一点,它在调度程序线程上获取单个执行互斥量+ 1,并为每个协程释放这个互斥量。 但是这看起来非常昂贵(它迫使每个协程之间的上下文切换) 我也看到了yield iterator的function,但据我所知,你不能在内部函数内产生(只在原始的ienumerator函数中)。 所以这对我来说不是好事。
我在XNA中玩弄,看到Vector3类使用公共字段而不是属性。 我尝试了一个快速的基准,发现对于一个struct的差异是相当戏剧性的(将两个向量加在一起,一亿次带有属性的2.0s和带有字段的1.4s)。 对于一个参考types,差异似乎并不大,但它在那里。 那么为什么呢? 我知道一个属性被编译成get_X和set_X方法,这会招致方法调用的开销。 但是,这些简单的getter / setter是不是总是被JIT内联? 我知道你不能保证JIT决定做什么,但是肯定这个概率是相当高的? 还有什么是在机器层面上将公共领域与财产分开的? 还有一件事我一直在想:一个自动实现的属性( public int Foo { get; set; } )如何比公共领域更好的OOdevise? 或者更好地说:这两个不同呢? 我知道,使它成为一个财产更容易与反思,但别的? 我敢打赌,这两个问题的答案是一样的。 顺便说一句:我正在使用的.NET 3.5 SP1,我相信固定的问题结构的方法(或结构的方法,我不知道)没有内衬,所以不是这样。 我想我至less使用它,这是肯定安装,但是,然后再次,我使用Vista的64位与SP1应该有DX10.1,除了我没有DX10.1 .. 另外:是的,我一直在运行发布版本:) 编辑 :我很欣赏快速答案的家伙,但我表示,我知道一个属性访问是一个方法调用,但我不知道为什么,可能是内联方法比直接字段访问速度慢。 编辑2 :所以我创build了另一个使用显式GetX()方法的结构(o我怎么不会错过我的Java日子),并执行相同的是否我禁用内联(通过[MethodImplAttribute(MethodImplOptions.NoInlining)] )或不,所以结论:非静态方法显然不是内联的,甚至不在结构上。 我认为有些例外,JIT可以优化虚拟方法。 为什么不能在不知道inheritance的结构上发生,因此方法调用只能指向一种可能的方法,对吗? 或者是因为你可以实现一个接口吗? 这真是一种耻辱,因为它真的会让我思考如何在性能关键的东西上使用属性,但是使用字段会让我感到肮脏,所以我不妨写下我在C中所做的事情。 编辑3 :我发现这个post关于完全相同的主题。 他的最终结论是,财产呼叫确实得到了优化。 我也可以发誓,我已经读了很多次,尽pipe是在IL中的callvirt ,简单的getter / setter属性将被内callvirt 。 那么我疯了吗? 编辑4 :里德·科普塞在下面的评论中发布了答案: 回复:编辑3 – 看到我更新的评论:我相信这是x86 JIT与x64 JIT问题。 在64位的JIT是不成熟的。 我希望随着更多的64位系统每天上网,MS会迅速改进。 […]
有没有一个分析.NET代码和发现竞争条件的工具? 我有一些代码有一个公共静态属性获取或创build一个私人静态字段。 它也有一个公共的静态方法,将该字段设置为null(…是的,我知道!) 由于这两种方法都没有锁,所以可以肯定的是,将来事情会变得非常糟糕。 我需要一个工具recursion地通过调用这些方法之一的东西,看看是否有任何东西在另一个线程上产生。 我正在寻找一个工具或者nDepend SQL脚本(如果这是可能的话)。
标题说这一切:我想要设置仅头C ++(或C)库项目,但无法find一个干净的方式。 经过一番search,我发现你不能使用add_library来设置一个普通的库来做到这一点,因为它需要一个可编译的源文件。 一种方法是使用add_custom_target而不是这样: # Get all headers (using search instead of explicit filenames for the example) file( GLOB_RECURSE XSD_HEADERS *.hxx ) add_custom_target( libsxsd SOURCES ${XSD_HEADERS} ) 但是这似乎并不完全在这里工作,因为我无法看到VS2010中生成的项目的来源。 我不知道这是否是一个错误,或者如果我做错了,或者如果有一个最好的方式来做到这一点,所以如果你有一个简单的解决scheme,请成为我的客人。
我的应用程序中有一个乘加内核,我想提高它的性能。 我使用Intel Core i7-960(3.2 GHz时钟),并已经使用SSE内部函数手动实现了内核,如下所示: for(int i=0; i<iterations; i+=4) { y1 = _mm_set_ss(output[i]); y2 = _mm_set_ss(output[i+1]); y3 = _mm_set_ss(output[i+2]); y4 = _mm_set_ss(output[i+3]); for(k=0; k<ksize; k++){ for(l=0; l<ksize; l++){ w = _mm_set_ss(weight[i+k+l]); x1 = _mm_set_ss(input[i+k+l]); y1 = _mm_add_ss(y1,_mm_mul_ss(w,x1)); … x4 = _mm_set_ss(input[i+k+l+3]); y4 = _mm_add_ss(y4,_mm_mul_ss(w,x4)); } } _mm_store_ss(&output[i],y1); _mm_store_ss(&output[i+1],y2); _mm_store_ss(&output[i+2],y3); _mm_store_ss(&output[i+3],y4); } 我知道我可以使用打包的fp向量来提高性能,而且我已经成功地做到了这一点,但是我想知道为什么单个标量代码无法满足处理器的峰值性能。 这个内核在我的机器上的性能是每个周期约1.6个FP操作,而每个周期最多可以有2个FP操作(因为FP + FP […]
select系统调用需要3个文件描述符集,用于监视可读/可写的fds和filedescriptor上的“exception”。 我的select手册页没有提到exceptfd描述符集。 它是干什么用的; 什么样的exception可以和将通知文件描述符? 我假设这可以是不同的描述符types…无论是TCP套接字,pipe道,tty等)。 有没有人有更多的信息,哪些types的错误select可以报告不同types的描述符?
我想知道新的C#5.0asynchronousfunction对于Rx – Reactive Extensions是什么意思? 它似乎不是替代品,但似乎重叠 – Task和IObservable 。 编辑: 任务与IObservable:何时使用什么?
考虑下面的代码片段: struct Base { }; struct Derived : Base { }; void f(Base &) { std::cout << "f(Base&)\n"; } template <class T = int> void g() { Derived d; f(T{} ? d : d); // 1 } void f(Derived &) { std::cout << "f(Derived&)\n"; } int main() { g(); } 在这种情况下,我认为应该在第一阶段调用f的函数,因为它的参数types是不可信的Derived& ,因此被parsing为f(Base&) ,它是唯一的范围。 铿锵3.8.0与我同意 ,但GCC […]