小编cas*_*One的帖子

为什么我的程序在完全循环8192个元素时会变慢?

以下是相关程序的摘录.矩阵img[][]的大小为SIZE×SIZE,并在以下位置初始化:

img[j][i] = 2 * j + i

然后,你创建一个矩阵res[][],这里的每个字段都是img矩阵中它周围9个字段的平均值.为简单起见,边框保留为0.

for(i=1;i<SIZE-1;i++) 
    for(j=1;j<SIZE-1;j++) {
        res[j][i]=0;
        for(k=-1;k<2;k++) 
            for(l=-1;l<2;l++) 
                res[j][i] += img[j+l][i+k];
        res[j][i] /= 9;
}
Run Code Online (Sandbox Code Playgroud)

这就是该计划的全部内容.为了完整起见,以下是之前的内容.没有代码.如您所见,它只是初始化.

#define SIZE 8192
float img[SIZE][SIZE]; // input image
float res[SIZE][SIZE]; //result of mean filter
int i,j,k,l;
for(i=0;i<SIZE;i++) 
    for(j=0;j<SIZE;j++) 
        img[j][i] = (2*j+i)%8196;
Run Code Online (Sandbox Code Playgroud)

基本上,当SIZE是2048的倍数时,此程序很慢,例如执行时间:

SIZE = 8191: 3.44 secs
SIZE = 8192: 7.20 secs
SIZE = 8193: 3.18 secs
Run Code Online (Sandbox Code Playgroud)

编译器是GCC.据我所知,这是因为内存管理,但我对这个主题并不太了解,这就是我在这里问的原因.

另外如何解决这个问题会很好,但如果有人能够解释这些执行时间,我已经足够开心了.

我已经知道malloc/free了,但问题不在于使用的内存量,它只是执行时间,所以我不知道这会有多大帮助.

c++ performance gcc memory-management

745
推荐指数
2
解决办法
9万
查看次数

553
推荐指数
9
解决办法
24万
查看次数

从lambda表达式中检索属性名称

通过lambda表达式传入时,是否有更好的方法来获取属性名称?这是我现在拥有的.

例如.

GetSortingInfo<User>(u => u.UserId);
Run Code Online (Sandbox Code Playgroud)

只有当属性是字符串时,它才能将其作为元素表达式进行处理.因为不是所有属性都是字符串我必须使用对象,但它会返回一个单一表达式.

public static RouteValueDictionary GetInfo<T>(this HtmlHelper html, 
    Expression<Func<T, object>> action) where T : class
{
    var expression = GetMemberInfo(action);
    string name = expression.Member.Name;

    return GetInfo(html, name);
}

private static MemberExpression GetMemberInfo(Expression method)
{
    LambdaExpression lambda = method as LambdaExpression;
    if (lambda == null)
        throw new ArgumentNullException("method");

    MemberExpression memberExpr = null;

    if (lambda.Body.NodeType == ExpressionType.Convert)
    {
        memberExpr = 
            ((UnaryExpression)lambda.Body).Operand as MemberExpression;
    }
    else if (lambda.Body.NodeType == ExpressionType.MemberAccess)
    {
        memberExpr = lambda.Body as MemberExpression;
    }

    if (memberExpr …
Run Code Online (Sandbox Code Playgroud)

c# linq lambda expression-trees

489
推荐指数
14
解决办法
21万
查看次数

如何将项目添加到List <T>的开头?

我想在绑定到a的下拉列表中添加"Select One"选项List<T>.

一旦我查询,我List<T>如何添加我的初始Item,而不是数据源的一部分,作为其中的FIRST元素List<T>?我有:

// populate ti from data               
List<MyTypeItem> ti = MyTypeItem.GetTypeItems();    
//create initial entry    
MyTypeItem initialItem = new MyTypeItem();    
initialItem.TypeItem = "Select One";    
initialItem.TypeItemID = 0;
ti.Add(initialItem)  <!-- want this at the TOP!    
// then     
DropDownList1.DataSource = ti;
Run Code Online (Sandbox Code Playgroud)

c# generic-list drop-down-menu

384
推荐指数
5
解决办法
19万
查看次数

Xcode的隐藏功能

随着新手大量涌入Xcode,我确信有很多Xcode提示和技巧可供分享.

你的是什么?

macos xcode cocoa objective-c

338
推荐指数
66
解决办法
24万
查看次数

ASP.NET MVC视图引擎比较

我一直在搜索SO和Google,了解可用于ASP.NET MVC的各种视图引擎,但是没有找到比视图引擎的简单高级描述更多的内容.

我不一定在寻找"最佳"或"最快",而是在各种情况下对主要参与者(例如默认的WebFormViewEngine,MvcContrib View Engines等)的优缺点进行实际比较.我认为这对确定从默认引擎切换是否对给定项目或开发组有利有用.

有没有人遇到这样的比较?

asp.net-mvc viewengine spark-view-engine razor

338
推荐指数
5
解决办法
10万
查看次数

如何在不使用System.Web的情况下进行UrlEncode?

我正在尝试编写一个调用网站数据的Windows客户端应用程序.为了使安装保持最小,我尝试仅在.NET Framework客户端配置文件中使用dll.麻烦的是我需要UrlEncode一些参数,有没有一种简单的方法可以在不导入System.Web.dll的情况下执行此操作,而System.Web.dll不是Client Pofile的一部分?

.net c# urlencode .net-client-profile

302
推荐指数
6
解决办法
21万
查看次数

无法在Lion下使用RVM安装Ruby - GCC问题

关于这个问题的大多数问题是由于缺少Xcode; 我安装了Xcode 4.2.

安装尝试:

rvm install 1.9.3
Installing Ruby from source to: /Users/jamie/.rvm/rubies/ruby-1.9.3-p0, this may take a while depending on your cpu(s)...

ruby-1.9.3-p0 - #fetching 
ruby-1.9.3-p0 - #extracted to /Users/jamie/.rvm/src/ruby-1.9.3-p0 (already extracted)
Fetching yaml-0.1.4.tar.gz to /Users/jamie/.rvm/archives
Extracting yaml-0.1.4.tar.gz to /Users/jamie/.rvm/src
Configuring yaml in /Users/jamie/.rvm/src/yaml-0.1.4.
Compiling yaml in /Users/jamie/.rvm/src/yaml-0.1.4.
Installing yaml to /Users/jamie/.rvm/usr
ruby-1.9.3-p0 - #configuring 
ERROR: Error running ' ./configure --prefix=/Users/jamie/.rvm/rubies/ruby-1.9.3-p0 --enable-shared --disable-install-doc --with-libyaml-dir=/Users/jamie/.rvm/usr ', please read /Users/jamie/.rvm/log/ruby-1.9.3-p0/configure.log
ERROR: There has been an error while running configure. Halting the installation. …
Run Code Online (Sandbox Code Playgroud)

ruby gcc rvm xcode4.2 osx-lion

268
推荐指数
4
解决办法
8万
查看次数

为什么.NET使用银行家的舍入作为默认值?

根据文档,该decimal.Round方法使用round-to-even算法,这对于大多数应用程序来说并不常见.所以我总是最终编写一个自定义函数来做更自然的圆半算法:

public static decimal RoundHalfUp(this decimal d, int decimals)
{
    if (decimals < 0)
    {
        throw new ArgumentException("The decimals must be non-negative", 
            "decimals");
    }

    decimal multiplier = (decimal)Math.Pow(10, decimals);
    decimal number = d * multiplier;

    if (decimal.Truncate(number) < number)
    {
        number += 0.5m;
    }
    return decimal.Round(number) / multiplier;
}
Run Code Online (Sandbox Code Playgroud)

有谁知道这个框架设计决策背后的原因?

是否有任何内置的圆形半算法实现到框架中?或者可能是一些非托管Windows API?

对于初学者而言,这可能会产生误导,因为他们只是写了一个decimal.Round(2.5m, 0)期望3但结果是2.

.net rounding

264
推荐指数
4
解决办法
5万
查看次数

如何获取程序运行的目录?

是否存在与平台无关且与文件系统无关的方法来获取使用C/C++运行程序的目录的完整路径?不要与当前的工作目录混淆.(请不要建议使用库,除非它们是clib或STL等标准库.)

(如果没有平台/文件系统无关的方法,也欢迎在Windows和Linux中使用特定文件系统的建议.)

c c++ working-directory

260
推荐指数
11
解决办法
48万
查看次数