Tag: C#的

优化C#/。NET程序的提示

现在看来,优化是一种失落的艺术。 是不是所有程序员都从代码中挤出每一个效率的时间? 在雪地里行走五英里的时候经常这样做? 本着带回失落的艺术的精神,你知道一些简单的(或者可能是复杂的)改变来优化C#/ .NET代码的技巧吗? 既然它是如此广泛的东西,取决于一个人想要完成什么,这将有助于提供您的技巧的上下文。 例如: 将多个字符串连接在一起时,请使用StringBuilder 。 请参阅底部的链接,了解这方面的注意事项。 使用string.Compare比较两个字符串,而不是像string1.ToLower() == string2.ToLower() 迄今为止的普遍共识似乎是衡量的关键。 这种想法忽略了一个观点:测量并不能告诉你什么是错误的,或者如果遇到瓶颈,该怎么办。 我遇到了字符串连接瓶颈一次,不知道该怎么做,所以这些技巧是有用的。 我甚至发表这个观点的意思是要有一个共同瓶颈的地方,以及在碰到它们之前如何避免它们。 甚至不必关心任何人应该盲目追随的即插即用代码,更多的是要了解应该考虑性能,至少在某种程度上应该考虑到这一点,而且还有一些常见的陷阱需要注意。 我可以看到,虽然也知道为什么提示是有用的,应该在哪里应用。 对于StringBuilder提示,我发现了很久以前在Jon Skeet的网站上的帮助 。

如何在C ++中“返回一个对象”?

我知道这个标题听起来很熟悉,因为有很多类似的问题,但是我要求问题的另一个方面(我知道堆栈中的东西和将它们放在堆上的区别)。 在Java中,我总是可以返回对“本地”对象的引用 public Thing calculateThing() { Thing thing = new Thing(); // do calculations and modify thing return thing; } 在C ++中,为了做类似的事情,我有两个选项 (1)当我需要“返回”一个对象时,我可以使用引用 void calculateThing(Thing& thing) { // do calculations and modify thing } 然后像这样使用它 Thing thing; calculateThing(thing); (2)或者我可以返回一个指向动态分配的对象的指针 Thing* calculateThing() { Thing* thing(new Thing()); // do calculations and modify thing return thing; } 然后像这样使用它 […]

解析逗号分隔的std :: string

如果我有一个包含逗号分隔数字列表的std :: string,解析出数字并将它们放入整数数组中的最简单方法是什么? 我不想把它推广到解析其他任何东西。 只是一个简单的逗号分隔的整数字符串,如“1,1,1,1,2,1,1,1,0”。

如何使用QueryPerformanceCounter?

我最近决定,我需要改变从毫秒到微秒为我的计时器类,经过一些研究,我已经决定,QueryPerformanceCounter可能是我最安全的赌注。 ( Boost::Posix上的警告,它可能无法在Win32 API上工作,让我有点)。 但是,我不确定如何实现它。 我正在做的是调用我使用的任何GetTicks() esque函数,并将其分配给Timer的startingTicks变量。 然后找到过去的时间量,我只是从startingTicks减去函数的返回值,当我重置计时器,我只是再次调用该函数,并将它分配的开始。 不幸的是,从我看到的代码不像调用QueryPerformanceCounter()那么简单,我不知道我应该通过什么作为它的参数。

FileSystemWatcher vs轮询来监视文件的变化

我需要设置一个应用程序来监视目录中创建的文件,无论是本地还是网络驱动器。 FileSystemWatcher或者定时器上的轮询将是最好的选择。 过去我使用过这两种方法,但没有广泛使用。 两种方法都有哪些问题(性能,可靠性等)?

在C#中通过引用或值传递对象

在C#中,我一直认为非原始变量是通过引用传递的,原始值是通过值传递的。 所以当传递给一个方法的任何非原始对象时,对该方法中的对象做的任何事情都会影响被传递的对象。 (C#101的东西) 但是,我注意到,当我传递一个System.Drawing.Image对象,这似乎并不是这样的情况? 如果我将system.drawing.image对象传递给另一个方法,并将图像加载到该对象上,那么让该方法超出范围并返回调用方法,该图像不会加载到原始对象上? 为什么是这样?

如何获得在C#中的CPU使用率?

我想获得C#中的应用程序总的CPU使用率。 我已经找到了很多方法来挖掘进程的属性,但是我只想要进程的CPU使用情况,以及像TaskManager一样的CPU总数。 我怎么做?

在运行时更改默认的app.config

我有以下问题: 我们有一个加载模块的应用程序(附加)。 这些模块可能需要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。

在.NET中,哪个循环运行得更快,“for”还是“foreach”?

在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 [编辑] 除了可读性方面外,我对事实和数字也很感兴趣。 有一些应用程序在最后一英里的性能优化挤压很重要。

列表<T>或IList <T>

任何人都可以向我解释为什么我想在C#中使用列表中的IList? 相关问题: 为什么公开List<T>被认为是不好的