现在看来,优化是一种失落的艺术。 是不是所有程序员都从代码中挤出每一个效率的时间? 在雪地里行走五英里的时候经常这样做? 本着带回失落的艺术的精神,你知道一些简单的(或者可能是复杂的)改变来优化C#/ .NET代码的技巧吗? 既然它是如此广泛的东西,取决于一个人想要完成什么,这将有助于提供您的技巧的上下文。 例如: 将多个字符串连接在一起时,请使用StringBuilder 。 请参阅底部的链接,了解这方面的注意事项。 使用string.Compare比较两个字符串,而不是像string1.ToLower() == string2.ToLower() 迄今为止的普遍共识似乎是衡量的关键。 这种想法忽略了一个观点:测量并不能告诉你什么是错误的,或者如果遇到瓶颈,该怎么办。 我遇到了字符串连接瓶颈一次,不知道该怎么做,所以这些技巧是有用的。 我甚至发表这个观点的意思是要有一个共同瓶颈的地方,以及在碰到它们之前如何避免它们。 甚至不必关心任何人应该盲目追随的即插即用代码,更多的是要了解应该考虑性能,至少在某种程度上应该考虑到这一点,而且还有一些常见的陷阱需要注意。 我可以看到,虽然也知道为什么提示是有用的,应该在哪里应用。 对于StringBuilder提示,我发现了很久以前在Jon Skeet的网站上的帮助 。
我的问题很简单:将.edmx文件放在MVC3项目的Web应用程序的模型文件夹中是否是一个好习惯?
我有以下问题: 我们有一个加载模块的应用程序(附加)。 这些模块可能需要app.config中的条目(例如WCF配置)。 因为模块是动态加载的,所以我不想在我的应用程序的app.config文件中包含这些条目。 我想要做的是以下几点: 在内存中创建一个新的app.config,该模块包含模块中的配置部分 告诉我的应用程序使用新的app.config 注意:我不想覆盖默认的app.config! 它应该透明地工作,以便例如ConfigurationManager.AppSettings使用该新文件。 在我评估这个问题的过程中,我想出了与此处提供的解决方案相同的方法: 使用nunit重新加载app.config 。 不幸的是,它似乎没有做任何事情,因为我仍然从正常的app.config中获取数据。 我用这个代码来测试它: Console.WriteLine(ConfigurationManager.AppSettings["SettingA"]); Console.WriteLine(Settings.Default.Setting); var combinedConfig = string.Format(CONFIG2, CONFIG); var tempFileName = Path.GetTempFileName(); using (var writer = new StreamWriter(tempFileName)) { writer.Write(combinedConfig); } using(AppConfig.Change(tempFileName)) { Console.WriteLine(ConfigurationManager.AppSettings["SettingA"]); Console.WriteLine(Settings.Default.Setting); } 它会打印相同的值,尽管combinedConfig包含的值不是普通的app.config。
在C#/ VB.NET / .NET,哪个循环运行更快, for或foreach ? 自从我读了一个for循环比foreach循环更快的工作, 很久以前我就认为它适用于所有集合,泛型集合,所有数组等等。 我搜索了Google,发现了一些文章,但其中大多数是不确定的(阅读文章的评论),并公开结束。 最理想的是将每个场景列出,并为相同的最佳解决方案。 例如(只是一个例子): 迭代1000个以上的字符串数组 – 比foreach更好 用于迭代IList (非泛型)字符串 – foreach比for更好 在网上找到一些相同的参考资料: 由Emmanuel Schanzer创作的盛大的旧文章 CodeProject FOREACH VS. 对于 博客 – 为了达到或不达到foreach ,这就是问题所在 ASP.NET论坛 – NET 1.1 C# for vs foreach [编辑] 除了可读性方面外,我对事实和数字也很感兴趣。 有一些应用程序在最后一英里的性能优化挤压很重要。
我想在C#中将目录的全部内容从一个位置复制到另一个位置。 似乎没有办法做到这一点使用System.IO类没有很多递归。 在VB中有一个方法,如果我们添加一个对Microsoft.VisualBasic的引用,就可以使用它: new Microsoft.VisualBasic.Devices.Computer(). FileSystem.CopyDirectory( sourceFolder, outputFolder ); 这似乎是一个相当丑陋的黑客。 有没有更好的办法?
我正在建立一个有一些公共和私人方法的类库。 我希望能够对私有方法进行单元测试(大部分是在开发过程中,但对未来的重构也是有用的)。 什么是正确的方法来做到这一点?