Tag: 性能

生成随机唯一数字的性能问题

我有一种情况,我需要创建成千上万的唯一数字。 但是这些数字必须是9位数,不能包含任何0。 我当前的方法是生成9位数(1-9)并将它们连接在一起,如果该数字不在列表中,则将其添加到其中。 例如 public void generateIdentifiers(int quantity) { uniqueIdentifiers = new List(quantity); while (this.uniqueIdentifiers.Count < quantity) { string id = string.Empty; id += random.Next(1,10); id += random.Next(1,10); id += random.Next(1,10); id += " "; id += random.Next(1,10); id += random.Next(1,10); id += random.Next(1,10); id += " "; id += random.Next(1,10); id += random.Next(1,10); id […]

C#中的字符串比较性能

有许多方法可以比较字符串。 通过单一方式获得性能提升吗? 我总是选择像这样比较字符串: string name = “Bob Wazowski”; if (name.CompareTo(“Jill Yearsley”) == 0) { // whatever… } 但我发现很少有人这样做,如果有的话,我看到更多的人只是做一个直接的==比较,据我所知,这是比较字符串的最差方式。 我错了吗? 另外,它是如何比较LINQ查询中的字符串的? 例如,我喜欢做以下事情: var results = from names in ctx.Names where names.FirstName.CompareTo(“Bob Wazowski”) == 0 select names; 但同样,我看到很少有人在他们的LINQ查询中进行字符串比较。

什么是在Windows中长时间跟踪进程内存使用情况的最佳工具?

什么是最好的工具来监视我的C#/ .Net Windows服务在很长一段时间内的内存使用情况。 据我所知,像perfmon这样的工具可以在很短的时间内监控内存使用情况,但不会在很长一段时间内以图形方式监控。 我需要几天而不是几秒钟的趋势数据。 为了清楚起见,我希望在很长一段时间内以精细的细节级别监视内存使用情况,并让图表显示整个时间范围和详细程度。 我需要一个小的采样间隔和一个大图。

.NET JIT是否优化了空循环?

本文另有建议。 但是仍然需要评估循环条件。 java只是使用特定技巧来识别这种情况吗?

快速计算大浮点数就像0.4 ^ 1亿,任何想法?

嗯…我遇到了一个问题我有一个计算结果是超过10 ^ -308(双.net中的最大值)我通过一个名为BIGFLOAT的库解决了这个问题http://www.fractal- landscapes.co.uk/bigint.html , 我需要什么来计算像0.4 ^(1000或100000000)这样的问题我需要花很长时间研究并行或分布式编程但是我需要一个快速且易于理解的解决方案我要去在接下来的6小时内完成这个项目! :d 这是代码: private BigFloat getBlocking(double k) { double p1, p2; BigFloat p3; p3 = new BigFloat(pp); p1 = this.P / (double)(k / (double)this.N); p2 = Math.Pow((1 – p1), 2); p3= new BigFloat(1-p2,pp); p3.Pow((int)k); return p3; } 其中K是1000,N是1001

.Net和In C#上的多态数字

真的很遗憾在.Net中没有数字的多态性,即没有统一不同类型的数字类型的数字接口,如bool,byte,uint,int等。在极端情况下,我们想要一个完整的抽象包代数类型。 Joe Duffy有一篇关于这个问题的文章: http://www.bluebytesoftware.com/blog/CommentView,guid,14b37ade-3110-4596-9d6e-bacdcd75baa8.aspx 您如何在C#中表达这一点,以便在不影响.Net或C#的情况下对其进行改造? 我有一个想法,首先要定义一个或多个抽象类型(接口,如INumeric – 或者比它更抽象),然后定义实现这些的结构,并在提供返回新类型的操作时包装类型(如int)(例如Integer32: INumeric;其中添加将被定义为 public Integer32 Add(Integer32 other) { return Return(Value + other.Value); } 我有点害怕这段代码的执行速度,但至少它是抽象的。 没有运营商超载的好处…… 还有其他想法吗? .Net看起来不像一个可行的长期平台,如果它不能拥有我认为的这种抽象 – 并且对它有效。 抽象是重用。 更新: 到目前为止,这是一个示例实现类型签名: public struct Integer32 : INumeric, IOrder 补偿缺乏协变返回类型。

GZipStream的减压性能很差

我有一个连接到后端WAS服务器的.NET 2.0 WinForms应用程序。 我正在使用GZipStream来解码从对服务器发出的HttpWebRequest调用返回的数据。 返回的数据是压缩的CSV,Apache正在压缩。 整个服务器堆栈是Hibernate – > EJB – > Spring – > Apache。 对于小响应,性能很好( 150KB的响应时,解压缩需要60多秒。 大部分时间似乎花在GZipStream构造函数中。 这是显示我从HttpWebResponse调用获取响应流的位置的代码: using (Stream stream = this.Response.GetResponseStream()) { if (this.CompressData && this.Response.ContentEncoding == “gzip”) { // Decompress the response byte[] b = Decompress(stream); this.ResponseBody = encoding.GetString(b); } else { // Just read the stream as a string using […]

从套接字接收数据的C#性能方法?

假设我们有一个简单的互联网套接字,它将发送10兆字节(因为我想忽略内存问题)的随机数据。 是否应该使用任何性能差异或最佳实践方法来接收数据? 最终输出数据应由byte []表示。 是的,我知道向内存写入任意数量的数据是不好的,如果我正在下载一个大文件,我不会这样做。 但是出于论证的缘故,让我们忽略它,并假设它是一个少量的数据。 我也意识到这里的瓶颈可能不是内存管理而是套接字接收。 我只是想知道什么是最有效的接收数据的方法。 一些狡猾的方式可以想到的是: 有一个List和一个缓冲区,在缓冲区满了之后,将它添加到列表和结尾list.ToArray()以获取byte [] 将缓冲区写入内存流后,在完成构造stream.Length的byte []之后,将其全部读入其中以获取byte []输出。 有没有更有效/更好的方法来做到这一点?

autoeventwireup性能成本

我一直在寻求提高我的asp.net页面性能,是否值得将autoeventwireup从true更改为false并添加事件处理程序或性能损失是否非常小? 这是一个asp.net 2.0项目。

从ADO.NET和SMSS执行时,具有相同查询计划的相同查询需要大约10倍的时间

我的查询相当复杂,但我已经简化了它来解决这个问题,现在它是一个简单的JOIN,我在SQL Server 2014数据库上运行。 查询是: SELECT * FROM SportsCars as sc INNER JOIN Cars AS c ON c.CarID = sc.CarID WHERE c.Type = 1 当我从SMSS运行此查询并在SQL事件探查器中观察它时,执行大约需要350毫秒。 当我使用Entity Framework或ADO.NET在我的应用程序中运行相同的查询时(我已尝试过两者)。 执行需要4500ms。 ADO.NET代码: using (var connection = new SqlConnection(connectionString)) { connection.Open(); var cmdA = new SqlCommand(“SET ARITHABORT ON”, connection); cmdA.ExecuteNonQuery(); var query = “SELECT * FROM SportsCars as sc INNER […]