相关疑难解决方法(0)

除了减少内存使用外,C#静态函数的性能是否优于非静态函数?

我假设public或者private static目标必须减少内存使用量,因为内存中只有一个静态目标副本.

这似乎是因为一个方法是静态的,可能使该方法成为CLR编译器进一步优化的潜在点,超出了非静态函数的可能性.虽然只是一个脆弱的理论,所以我来问你们所有人.

static publicprivate方法提供了超越减少内存使用量增加的任何性能优势?

(注意:我对那些谈论过早优化问题的回答不感兴趣.当然,这是我每天都遵循的合理建议,但这并不意味着有时不需要优化.(双重否定!).让我放纵我的好奇,至少)

c# optimization performance static keyword

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

Code Golf:Pi的Leibniz公式

我最近在" 你更有争议的编程意见什么 "中发布了我最喜欢的采访白板编码问题之一,即编写一个使用Leibniz公式计算Pi的函数.

它可以通过多种不同的方式进行处理,退出条件需要一些思考,所以我认为它可能会成为一个有趣的代码高尔夫问题.最短的代码获胜!

假设Pi可以使用函数4*(1 - 1/3 + 1/5 - 1/7 + ...)估算,更多项更精确,可以编写一个函数来计算Pi到0.00001以内.

编辑:2008年1月3日

正如评论中所建议的那样,我将退出条件更改为0.00001,因为这就是我的真实含义(由于四舍五入,精确度小数点后五位更难,所以我不想在面试中问这个,而在0.00001以内是更容易理解和实现退出条件).

另外,为了回答评论,我想我的意图是解决方案应该计算迭代次数,或检查它何时做得足够多,但没有什么可以阻止你预先计算迭代次数并使用该数字.我真的有兴趣问这个问题,看看人们会想出什么.

code-golf rosetta-stone

31
推荐指数
14
解决办法
1万
查看次数

Haskell有变量吗?

我经常听说Haskell没有变量的说法; 特别是,这个答案声称它没有,它至少被投票了九次并被接受.

那么它是否有变量,为什么?

这个问题似乎也适用于ML,F#,OCaml,Erlang,Oz,Lava和所有SSA中间语言.

variables monads haskell immutability referential-transparency

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

你如何在动态语言中进行不同的编程?

那些真正懂得如何利用动态编程语言的人如何以不同于使用静态语言工作的人来编程?

我对静态与动态类型的整个争论很熟悉,但这不是我所得到的.我想讨论在动态语言中实用但在静态语言中不实用的问题解决技术.

我在动态编程语言中编写的大多数代码与用静态编程语言编写的代码差别不大.俗话说,你可以用任何语言写FORTRAN,很多人都这样做.但有些人使用动态编程语言以一种不易转换为C++的方式解决问题.他们的一些技术是什么?

讨论如何使用动态编程语言的一些好资源是什么?不是关于语言语法或API参考的书籍,而是关于利用动态语言功能的问题解决方法的资源.

编辑(2009年1月5日):我很欣赏下面的答案,但它们似乎并没有说明动态语言倡导者说他们所经历的生产力的巨大提升.

dynamic-languages

30
推荐指数
2
解决办法
1935
查看次数

任何推荐的Java分析教程?

是否有任何推荐的Java应用程序分析教程?

我正在使用JProfilerEclipse 测试和性能工具平台(TPTP)进行分析.然而,虽然配备了精彩的武器,作为Java新概要的新手,我仍然缺少指出瓶颈的一般理论和技巧.

java performance profiling

24
推荐指数
3
解决办法
2万
查看次数

找到最少3个数字的最快方法?

在我写的一个程序中,在这个例程中,20%的时间用于在内循环中找出最少3个数字:

static inline unsigned int
min(unsigned int a, unsigned int b, unsigned int c)
{
    unsigned int m = a;
    if (m > b) m = b;
    if (m > c) m = c;
    return m;
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以加快速度吗?对于x86/x86_64,我也可以使用汇编代码.

编辑:回复一些评论:
*正在使用的编译器是gcc 4.3.3
*就汇编而言,我只是一个初学者.我在这里要求组装,学习如何做到这一点.:)
*我有四核Intel 64运行,所以支持MMX/SSE等.
*这里很难发布循环,但我可以告诉你它是levenshtein算法的一个高度优化的实现.

这是编译器给我的非内联版本的min:

.globl min
    .type   min, @function
min:
    pushl   %ebp
    movl    %esp, %ebp
    movl    8(%ebp), %edx
    movl    12(%ebp), %eax
    movl    16(%ebp), %ecx
    cmpl    %edx, %eax
    jbe .L2
    movl    %edx, %eax
.L2:
    cmpl    %ecx, %eax
    jbe .L3 …
Run Code Online (Sandbox Code Playgroud)

c performance x86 assembly

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

循环提升仍然是C代码的有效手动优化吗?

使用最新的gcc编译器,我还需要考虑这些类型的手动循环优化,还是编译器会为我做好充分的处理?

c c++ optimization gcc

18
推荐指数
3
解决办法
3864
查看次数

在积极内联的情况下分析C++?

我试图找出我的C++程序花费时间的地方,使用gprof.这是我的困境:如果我使用我用于发布版本的相同优化设置进行编译,几乎所有内容都被内联,并且gprof告诉我,无益的是,我90%的时间花在核心例程中,其中所有内容都是内联的.另一方面,如果我使用内联禁用编译,程序运行速度会慢一个数量级.

我想知道当我的程序编译时启用内联时,从我的核心例程调用的程序花了多少时间.

我在四核Intel机器上运行64位Ubuntu 9.04.我查看了google-perftools,但这似乎不适用于x86_64.在32位计算机上运行不是一种选择.

当启用内联时,是否有人建议如何更有效地配置我的应用程序?

编辑:这是我的问题的一些澄清.如果最初不清楚,我道歉.

我想找到在我的应用程序中花费的时间.分析我的优化构建导致gprof告诉我,大约90%的时间花在main上,其中所有内容都是内联的.在剖析之前我已经知道了!

我想知道的是内联函数花了多少时间,最好不要在我的构建选项中禁用优化或内联.在使用内联禁用进行性能分析时,应用程序的速度会慢一个数量级.这种执行时间的差异是一个方便的问题,但是,我不确定使用内联禁用构建的程序的性能配置文件是否与使用内联启用的程序的性能配置文件强烈对应.

简而言之:有没有办法在不禁用优化或内联的情况下获得有关C++程序的有用的性能分析信息?

c++ profiling

18
推荐指数
2
解决办法
1463
查看次数

为什么我的表现慢慢爬行我将方法移动到基类?

我在C#中编写不可变二进制树的不同实现,我希望我的树从基类继承一些常用方法.

不幸的是,它从基类派生类是一败涂地缓慢.非派生类可以充分发挥作用.以下是两个几乎相同的AVL树实现,用于演示:

  • AvlTree:http://pastebin.com/V4WWUAyT
  • DerivedAvlTree:http://pastebin.com/PussQDmN

这两棵树具有完全相同的代码,但我在基类中移动了DerivedAvlTree.Insert方法.这是一个测试应用程序:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using Juliet.Collections.Immutable;

namespace ConsoleApplication1
{
    class Program
    {
        const int VALUE_COUNT = 5000;

        static void Main(string[] args)
        {
            var avlTreeTimes = TimeIt(TestAvlTree);
            var derivedAvlTreeTimes = TimeIt(TestDerivedAvlTree);

            Console.WriteLine("avlTreeTimes: {0}, derivedAvlTreeTimes: {1}", avlTreeTimes, derivedAvlTreeTimes);
        }

        static double TimeIt(Func<int, int> f)
        {
            var seeds = new int[] { 314159265, 271828183, 231406926, 141421356, 161803399, 266514414, 15485867, 122949829, 198491329, 42 };

            var …
Run Code Online (Sandbox Code Playgroud)

c# performance inheritance

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

最动态的动态编程语言

当它说明这一点时,似乎我必须同意这篇文章

[...]动态类型语言中的代码遵循静态类型约定

我遇到的很多动态语言代码确实看起来非常静态(思考PHP),而动态方法看起来有些笨拙或不必要.

大多数情况下,它只是省略类型签名,在类型推断/结构类型的上下文中,甚至根本不必暗示动态类型.

所以我的问题(并不意味着过于主观)是动态语言应用领域都是这些更高级的动态语言特性(不能在静态/编译语言中轻松复制)实际上和在语言使用.

例子:

  • 反射
  • 一流的延续
  • 运行时对象更改/生成
  • 元编程
  • 运行时代码评估
  • 不存在的成员行为

这些技术的有用应用是什么?

programming-languages

15
推荐指数
2
解决办法
2492
查看次数