Tag: C#的

std :: dynarray vs std :: vector

C ++ 14提供了std::dynarray : std :: dynarray是一个序列容器,它封装了在构造时固定的大小的数组,并且在对象的整个生命周期中不会改变。 std::dynarray必须在运行时分配为std::vector 。 那么, std::dynarray的好处和用法是std::dynarray而我们可以使用更dynamic(也可重定义)的std::vector ?

在.NET中双重检查locking需要volatile修饰符

多个文本说,当在.NET中执行双重检查locking时,您locking的字段应该应用挥发性修饰符。 但为什么呢? 考虑下面的例子: public sealed class Singleton { private static volatile Singleton instance; private static object syncRoot = new Object(); private Singleton() {} public static Singleton Instance { get { if (instance == null) { lock (syncRoot) { if (instance == null) instance = new Singleton(); } } return instance; } } } 为什么不“locking(syncRoot)”完成必要的内存一致性? 在“locking”语句之后,读写是否是不稳定的,这样才能完成必要的一致性?

风格指南为C#?

我喜欢c ++使用谷歌的风格指南, 这里发表。 有没有类似的风格指南可用于C#也? 我正在寻找更多的良好实践,以及简单的事情,就像在谷歌风格指南为c + +。

MVC 4或5的MEF – 可插拔架构(2014)

我正在尝试使用像Orchard CMS这样的可插入架构来构buildMVC4 / MVC5应用程序。 所以我有一个MVC应用程序,这将是启动项目和照顾auth,导航等。然后将有多个模块单独构build为asp.net类库或剥离mvc项目,并有控制器,视图,数据仓库等。 我已经花了整整一天的时间在网上的教程和下载样本等,发现肯尼有最好的例子 – http://kennytordeur.blogspot.in/2012/08/mef-in-aspnet-mvc-4-and -webapi.html 我能够从模块(独立的DLL)中导入控制器,如果我添加对这些DLL的引用。 但是使用MEF的原因是能够在运行时添加模块。 我希望将DLL和视图一起复制到启动项目的〜/ Modules //目录中(我设法做到了这一点),MEF只会把它们选中。 努力使MEF加载这些库。 还有MefContrib在这个答案解释ASP.NET MVC 4.0控制器和MEF,如何把这两个一起? 这是我将要尝试的下一件事情。 但是我很惊讶,MEF没有像MVC那样开箱即可。 有没有人有类似的架构工作(有或没有MefContrib)? 最初,我甚至想到剥离Orchard CMS并将其用作框架,但这太复杂了。 在MVC5中开发应用程序以利用WebAPI2也是很好的。

在C#中,为什么匿名方法不能包含yield语句?

我认为这样做会很好(用lambda做一个yield return): public IList<T> Find<T>(Expression<Func<T, bool>> expression) where T : class, new() { IList<T> list = GetList<T>(); var fun = expression.Compile(); var items = () => { foreach (var item in list) if (fun.Invoke(item)) yield return item; // This is not allowed by C# } return items.ToList(); } 但是,我发现我不能以匿名方式使用收益率。 我想知道为什么。 产量文档只是说这是不允许的。 由于这是不允许的,我只是创build列表并添加项目。

任务并行库replace为BackgroundWorker?

任务并行库是否有什么可以被认为是对BackgroundWorker类的替代或改进? 我有一个向导式UI的WinForms应用程序,它执行一些长时间运行的任务。 我希望能够有一个标准的进度条响应式的用户界面和取消操作的能力。 我之前用BackgroundWorker做过这个,但是我想知道是否有一些TPL模式可以用来代替?

执行范围检查通过投射到uint而不是检查负值是否更有效?

我偶然发现了.NET的List源代码中的这段代码 : // Following trick can reduce the range check by one if ((uint) index >= (uint)_size) { ThrowHelper.ThrowArgumentOutOfRangeException(); } 显然这比if (index < 0 || index >= _size)更有效率(? if (index < 0 || index >= _size) 我很好奇背后的理由。 单个分支指令是否比两个转换为uint更昂贵? 还是有一些其他的优化,会使这个代码比另一个数字比较更快? 为了解决房间里的大象:是的,这是微型优化,不,我不打算在我的代码中到处使用它 – 我只是好奇;)

什么时候应该使用perror(“…”)和fprintf(stderr,“…”)?

阅读手册页和一些代码并不能真正帮助我理解当我使用perror("…")还是fprintf(stderr, "…")之间的区别。

在C#中获取主目录的path?

好的,我已经检查了Environment.SpecialFolder,但是这里没有任何内容。 我想在C#中获取当前用户的主目录。 (例如XP下的c:\documents and settings\user ,Vista下的c:\users\user和Unix下的/home/user )。 我知道我可以阅读环境variables来找出这个问题,但是我想以跨平台的方式来做这件事。 有什么办法可以做到这一点与.NET(最好使用mscorlib)? 更新 :好的,这是我最终使用的代码: string homePath = (Environment.OSVersion.Platform == PlatformID.Unix || Environment.OSVersion.Platform == PlatformID.MacOSX) ? Environment.GetEnvironmentVariable("HOME") : Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%");

locking模式以正确使用.NET MemoryCache

我假设这个代码有并发问题: const string CacheKey = "CacheKey"; static string GetCachedData() { string expensiveString =null; if (MemoryCache.Default.Contains(CacheKey)) { expensiveString = MemoryCache.Default[CacheKey] as string; } else { CacheItemPolicy cip = new CacheItemPolicy() { AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddMinutes(20)) }; expensiveString = SomeHeavyAndExpensiveCalculation(); MemoryCache.Default.Set(CacheKey, expensiveString, cip); } return expensiveString; } 并发问题的原因是多个线程可以获得空密钥,然后尝试将数据插入caching。 什么是最短和最干净的方式来使这个代码并发certificate? 我喜欢在caching相关代码中遵循一个良好的模式。 一个在线文章的链接将是一个很大的帮助。 更新: 我根据@Scott Chamberlain的回答提出了这个代码。 任何人都可以find任何性能或并发问题? 如果这样做,它会节省许多代码和错误。 using […]