Tag: C#的

如果语句与if-else语句,哪个更快?

有一天我和一个朋友争论了这两个片段。 哪个更快,为什么? value = 5; if (condition) { value = 6; } 和: if (condition) { value = 6; } else { value = 5; } 如果value是一个matrix呢? 注意:我知道这个value = condition ? 6 : 5; value = condition ? 6 : 5; 存在,我期望它更快,但它不是一个选项。 编辑 (由于问题暂时搁置,工作人员要求): 请考虑由主stream编译器(如g ++,clang ++,vc,mingw )在优化和非优化版本或MIPS汇编中生成的x86 汇编 。 当大会不同时,解释为什么一个版本更快,何时( 例如“更好,因为没有分支和分支有下列问题blahblah” )

通用方法多个(OR)types的约束

读这个 ,我知道有可能允许一个方法接受多种types的参数,使其成为一种通用的方法。 在示例中,下面的代码与types约束一起使用,以确保“U”是一个IEnumerable<T> 。 public T DoSomething<U, T>(U arg) where U : IEnumerable<T> { return arg.First(); } 我发现了一些允许添加多个types约束的代码,例如: public void test<T>(string a, T arg) where T: ParentClass, ChildClass { //do something } 但是,这段代码似乎强制arg必须是一个ParentClass 和 ChildClasstypes。 我想要做的就是说,arg可以是一种ParentClass 或 ChildClasstypes, ParentClass : public void test<T>(string a, T arg) where T: string OR Exception { //do something } […]

如何强制BundleCollection刷新MVC4中的caching脚本包

…或者我学会了如何停止担心,并且仅仅针对微软公司完全没有logging的API编写代码 。 有没有官方的System.Web.Optimization版本的实际文档? “因为我当然找不到任何东西,没有XML文档,所有的博客post都提到了RC API,它们有很大的不同。 安美居.. 我正在写一些代码来自动解决JavaScript的依赖关系,并从这些依赖关系即时创build捆绑。 除非您编辑脚本或以其他方式进行影响软件包而不重新启动应用程序的更改,否则所有更改都不会发生变化。 所以我添加了一个选项来禁用caching的依赖关系在开发中使用。 但是, 即使Bundle集合已经改变 ,显然BundleTablescachingURL。 例如,在我自己的代码中,当我想重新创build一个包时,我会这样做: // remove an existing bundle BundleTable.Bundles.Remove(BundleTable.Bundles.GetBundleFor(bundleAlias)); // recreate it. var bundle = new ScriptBundle(bundleAlias); // dependencies is a collection of objects representing scripts, // this creates a new bundle from that list. foreach (var item in dependencies) { bundle.Include(item.Path); } // add […]

为什么我需要std :: get_temporary_buffer?

为了什么目的,我应该使用std::get_temporary_buffer ? 标准说以下几点: 获得足够存储多达n个相邻T对象的存储器的指针。 我认为缓冲区将被分配在堆栈上,但事实并非如此。 根据C ++标准,这个缓冲区实际上不是临时的。 这个函数对全局函数::operator new有什么好处,它不会构造对象。 我说得对,下面的说法是相同的吗? int* x; x = std::get_temporary_buffer<int>( 10 ).first; x = static_cast<int*>( ::operator new( 10*sizeof(int) ) ); 这个函数是否只存在语法糖? 为什么在它的名字中有temporary ? Dobb's Journal博士在1996年7月1日提出了一个用例来实现algorithm: 如果没有缓冲区可以分配,或者如果它小于请求,algorithm仍然正常工作,它只是减慢速度。

编写程序来处理导致在Linux上丢失写入的I / O错误

TL; DR: 如果Linux内核丢失了一个缓冲的I / O写入 ,应用程序有什么方法可以找出来? 我知道你必须fsync()文件(及其父目录)的耐久性 。 问题是如果内核由于I / O错误丢失了正在等待写入的脏缓冲区,那么应用程序如何检测这个并恢复或中止? 考虑数据库应用程序等,其中写和写耐久性的顺序可能是至关重要的。 遗失的写道? 怎么样? 在某些情况下,Linux内核的块层可能会丢失由write() , pwrite()等成功提交的缓冲I / O请求,出现如下错误: Buffer I/O error on device dm-0, logical block 12345 lost page write due to I/O error on dm-0 (请参见fs/buffer.c end_buffer_write_sync(…)和end_buffer_async_write(…) )。 在较新的内核上,错误将包含“丢失的asynchronous页面写入” ,如: Buffer I/O error on dev dm-0, logical block 12345, lost async page write […]

WPF中的MVVM – 如何提醒ViewModel的模型中的变化…或者我应该?

我正在浏览一些MVVM文章,主要是这个和这个 。 我的具体问题是: 如何将模型更改从模型传递到ViewModel? 在乔希的文章中,我没有看到他这样做。 ViewModel总是要求模型的属性。 在Rachel的例子中,她的模型实现了INotifyPropertyChanged ,并且引发了模型中的事件,但是它们被视图本身所使用(请参阅她的文章/代码以获取更多关于她为什么这么做的细节)。 我没有看到模型提示ViewModel对模型属性进行更改的示例。 这让我担心,也许这不是由于某种原因。 有没有一种模式来提醒ViewModel模型中的变化? 这似乎是必要的,因为(1)对于每个模型可以有多于1个ViewModel,并且(2)即使只有一个ViewModel,模型上的一些动作也可能导致其他属性被改变。 我怀疑可能会有“你为什么要这样做?”的forms的答案/评论。 评论,所以这里是我的程序的描述。 我是MVVM的新手,所以也许我的整个devise都是错误的。 我将简要描述一下。 我正在编写一些比“客户”或“产品”类更有趣的东西(至less对我来说!)。 我在编程BlackJack。 我有一个没有任何代码的View,只是依赖于绑定ViewModel中的属性和命令(参见Josh Smith的文章)。 无论是好还是坏,我都认为模型应该包含不仅仅是“ PlayingCard ,“ Deck等类别,而且还包含保持整个游戏状态的BlackJackGame类,并且知道玩家什么时候破产,庄家必须画牌,以及玩家和经销商当前得分是多less(小于21,21,胸围等)。 在BlackJackGame我公开了像“DrawCard”这样的方法,并且在我看来,当绘制卡片时, CardScore和IsBust等属性应该被更新,并且这些新的值传递给ViewModel。 也许这是错误的思想? 有人可能会认为ViewModel叫做DrawCard()方法,所以他应该知道要求更新的分数,看看他是不是破产了。 意见? 在我的ViewModel中,我有逻辑来获取纸牌的实际图像(基于套装,等级),并将其用于视图。 模型不应该关心这个(也许其他ViewModel只会使用数字,而不是纸牌图像)。 当然,也许有人会告诉我,该模型甚至不应该有一个BlackJack游戏的概念,应该在ViewModel中处理?

在C#中同步接口和实现注释的方法

是否有自动的方式来同步接口和它的实现之间的评论? 我目前正在logging他们,不想手动保持同步。 更新: 考虑这个代码: interface IFoo{ /// <summary> /// Commenting DoThis method /// </summary> void DoThis(); } class Foo : IFoo { public void DoThis(); } 当我创build这样的课程: IFoo foo=new Foo(); foo.DoThis();//comments are shown in intellisense 这里的评论不显示: Foo foo=new Foo(); foo.DoThis();//comments are not shown in intellisense <inheritDoc/>标记将完美地生成Sand Castle中的文档,但在智能感知工具提示中不起作用。 请分享你的想法。 谢谢。

什么是最高效的线程安全的C ++logging器?

我正在研究性能关键的multithreading应用程序。 我看着rlog,Ace和Boostlogging。 我select了rlog,因为我读的是最快的(当日志被禁用时,它的开销最小)。 我的问题是它显示文件名,行号等,即使在发布模式。 如果你能告诉我如何closures这些信息,我的问题可能会得到解决。 无论如何,在我的情况下,C ++中最有效的logging器是什么?

精心devise的查询命令和/或规格

我一直在寻找一个很好的解决scheme来解决典型的Repository模式(针对特定查询的不断增长的方法列表,请参阅http://ayende.com/blog/3955/repository-是新的单身人士 )。 我非常喜欢使用Command查询的想法,特别是通过使用Specification模式。 然而,我的规范问题是它只涉及到简单select的标准(基本上是where子句),并没有处理查询的其他问题,如连接,分组,子集select或投影等。基本上,所有额外的许多查询必须经过以获得正确的数据集。 (注意:我在命令模式中使用了“命令”这个术语,也称为查询对象。我不是在命令/查询分离中讨论命令,在查询和命令之间有区别(更新,删除,插)) 所以我正在寻找封装整个查询的替代scheme,但是仍然足够灵活,以至于您不只是换取意大利面条仓库来获取命令类的爆炸式增长。 我已经使用了Linqspecs,虽然我发现能够为select标准分配有意义的名称是有价值的,但这还不够。 也许我正在寻求结合了多种方法的混合解决scheme。 我正在寻找其他人可能已经开发的解决这个问题的解决scheme,或者解决不同的问题,但是仍然满足这些要求。 在链接的文章中,Ayendebuild议直接使用nHibernate上下文,但是我觉得这在很大程度上使业务层复杂化,因为它现在还必须包含查询信息。 等待一段时间后,我会提供一个赏金。 所以,请让您的解决scheme赏金值得,好的解释,我会select最好的解决scheme,并upvote亚军。 注:我正在寻找一些基于ORM的东西。 显然不一定是EF或nHibernate,但这些是最常见的,并且最适合。 如果它可以很容易地适应其他ORM的,这将是一个奖金。 Linq兼容也不错。 更新:我真的很惊讶,这里没有很多好的build议。 看起来好像人们完全是CQRS,或者他们完全在版本库里。 我的大多数应用程序都不够复杂,不能保证CQRS(大多数CQRS提倡者都表示不应该使用它)。 更新:这里似乎有点混乱。 我不是在寻找新的数据访问技术,而是在业务和数据之间devise合理的界面。 理想情况下,我正在寻找的是查询对象,规范模式和存储库之间的某种交叉。 正如我上面所说,规范模式只处理where子句方面,而不是查询的其他方面,如连接,子select等。存储库处理整个查询,但一段时间后失控。 查询对象也处理整个查询,但我不想简单地用查询对象的爆炸replace存储库。

为什么添加汇编注释会在生成的代码中引起如此激进的变化

所以,我有这个代码: constexpr unsigned N = 1000; void f1(char* sum, char* a, char* b) { for(int i = 0; i < N; ++i) { sum[i] = a[i] + b[i]; } } void f2(char* sum, char* a, char* b) { char* end = sum + N; while(sum != end) { *sum++ = *a++ + *b++; } } […]