相关疑难解决方法(0)

最后的性能优化策略

这个网站上已经存在很多性能问题,但是我发现几乎所有这些都是特定于问题且相当狭窄的问题.几乎所有人都重复这些建议,以避免过早优化.

我们假设:

  • 代码已经正常工作
  • 所选择的算法对于问题的情况已经是最佳的
  • 已经测量了代码,并且已经隔离了违规的例程
  • 所有优化尝试也将被测量,以确保它们不会使事情变得更糟

我在这里寻找的是在一个关键算法中挤出最后几个百分点的策略和技巧,除此之外别无他法.

理想情况下,尝试使答案语言不可知,并在适用的情况下指出建议策略的任何缺点.

我将使用我自己的初步建议添加回复,并期待Stack Overflow社区可以想到的任何其他内容.

language-agnostic optimization performance

600
推荐指数
28
解决办法
8万
查看次数

什么是一些好的.NET Profilers?

您在使用.net程序时使用了哪些分析器,您会特别推荐哪些?

.net c# profiler profiling

374
推荐指数
12
解决办法
31万
查看次数

C#中的通用与非通用性能

我写了两个等价的方法:

static bool F<T>(T a, T b) where T : class
{
    return a == b;
}

static bool F2(A a, A b)
{
    return a == b;
}
Run Code Online (Sandbox Code Playgroud)

时差:
00:00:00.0380022
00:00:00.0170009

测试代码:

var a = new A();
for (int i = 0; i < 100000000; i++)
    F<A>(a, a);
Console.WriteLine(DateTime.Now - dt);

dt = DateTime.Now;
for (int i = 0; i < 100000000; i++)
    F2(a, a);
Console.WriteLine(DateTime.Now - dt);
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么?

在下面的评论中,dtb*显示CIL:

IL for F2: ldarg.0, ldarg.1, …
Run Code Online (Sandbox Code Playgroud)

c# generics performance templates

25
推荐指数
4
解决办法
1万
查看次数

计算方法每秒计算多少次的最佳方法

我有dll方法,应该是"QoS" - 这种方法应该被称为每秒最多100次:

    private static extern int ExecTrans(int connectionId);
Run Code Online (Sandbox Code Playgroud)

这个方法只在程序中的一个地方使用,所以可以在这个地方进行qos.我需要单独的"qos counter" connectionId.所以ExecTrans(1),ExecTrans(2)应该去不同的柜台.

在第一次迭代时,我想计算调用方法的频率(对于每个方法connectionId).即我想要"实时统计".有两种方法:

- allow to exceed limitiation for a short period. for example allow "100 transaction from 0 to 1 second, 100 transaction from 1 to 2 seconds and 200 transactions from 0.5 to 1.5 second".
- at any second interval transactions should not exceed 100.
Run Code Online (Sandbox Code Playgroud)

现在我不关心使用哪种方法,但我会选择一种创建较少的"开销".我希望qos尽可能少地添加"额外工作",因为它的交易软件每0.1毫秒都很敏感.

至于第一种方法,我认为我可以使用类似的东西(pseude-code,可能stats并且curStats应该是线程安全的):

private int[] stats      // statistic to display to user
private …
Run Code Online (Sandbox Code Playgroud)

c#

9
推荐指数
1
解决办法
5150
查看次数

如何在 C# 中进行性能测试

如何在 C# 中测试性能?

我现在所知道的就是使用:

Stopwatch sw = new Stopwatch();

sw.Start();
{
     //code to test
}
sw.Stop();
Run Code Online (Sandbox Code Playgroud)

还有其他方法可以做到这一点还是上述方法错误?

c# testing c#-4.0

8
推荐指数
1
解决办法
2万
查看次数

如何诊断System.OutOfMemoryException?

我在上周五离开工作之前运行了一些代码,我周一在这里,它以OutOfMemoryException停止.我估计整个过程需要进行数百亿次计算,所以这不是一项小任务.

我甚至不知道如何解决这个问题.
有什么指针吗?

c# out-of-memory

6
推荐指数
3
解决办法
7799
查看次数

如何分析我的 C# 应用程序?

可能的重复:
什么是好的 .NET 分析器?
有没有不错的 C# 分析器?

我经常想分析我们团队项目中的代码以比较速度和效率。但是,根据 Microsoft 的性能分析初学者指南,Visual Studio 性能向导不是我们使用的 Visual Studio 2010 Professional 的一部分。

鉴于此限制,似乎需要第三方应用程序。我怀疑我能否说服我的老板在分析应用程序上花很多钱。我有哪些选择,以及如何使用这样的工具?

编辑

感谢您提供有关哪些分析器可用的其他问题的链接。很有用!我正在编辑这个问题,以更多地关注如何使用这些分析器。有什么显着差异吗?在可用性方面?

c# profiling

5
推荐指数
1
解决办法
2万
查看次数

自动记录和统计(C#应用程序)

我正在尝试考虑输入统计信息和某种登录程序的最佳方法.1.有没有人有一篇关于在程序中实施的统计数据的好文章?
2.我可以创建一个属性,以便在某个方法之前调用计时器来测量运行所花费的时间吗?例如

class A
{
  [RunTimer]
  public void Foo()
  {
     // do stuff
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑
好我们希望有机会在运行时控制统计数据,而不仅仅是ob dev或QA时间.

c# statistics logging attributes

3
推荐指数
1
解决办法
1578
查看次数

任何ASP.Net基准测试工具?

我想在服务器中运行时测量.Net应用程序的性能,尤其是ASP.Net中的Web应用程序.

我需要知道任何基准工具使我知道我的源代码可以优化.只要基准工具可以帮助我优化网站的性能.

有关获得仅测量.Net的基准工具的建议吗?请列出商业和免费应用程序或任何开源基准测试工具.

.net asp.net benchmarking open-source

2
推荐指数
1
解决办法
2626
查看次数

有没有找到应用程序瓶颈的好方法?

我试图弄清楚最好的方法是找出我的应用程序的哪些部分运行时间最长(最大的运行成本).该应用程序并不过分复杂,但我想确保我已经正确调整了所有部分,以便我可以处理更大的负载.

应用程序:加载/粉碎xml文档并将内容转储到数据库中.该应用程序使用Linq to XML来解析xml,并使用SQL Server TVP将数据传递给DB.因为我正在使用TVP,所以即使数据集合数据不大(XML文件最多为1MB),我也可以往返数据库.

任何有关如何隔离瓶颈的建议都将不胜感激.

一如既往地非常感谢反馈.

c#

2
推荐指数
1
解决办法
162
查看次数

ASP.Net提高服务器性能?

我的页面中有一个用户控件,位于更新面板内.通过使用用户控件,我正在为用户显示一条消息.我需要每隔5分钟更改一次消息.消息存储在数据库和用户中控件将每隔5分钟自动从数据库中检索一次消息.我的问题是,当有超过50个用户访问同一页面时,然后每5分钟,请求从每个客户端自动发送到服务器,这会降低服务器性能.那么任何人都可以帮我解决这个性能问题.

asp.net performance

1
推荐指数
1
解决办法
182
查看次数