首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >循环编译器优化

循环编译器优化
EN

Stack Overflow用户
提问于 2012-12-13 14:18:23
回答 5查看 757关注 0票数 5

我需要优化一个广泛使用linq的大型应用程序。许多linq语句在linq扩展方法中创建匿名对象。例如:-

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// custom sort order
var sortedData = data.OrderBy(x => (new List<string>() {"Orange", "Apple", "Pear" }).IndexOf(x.Name));
foreach (var d in sortedData) {
    ....

问题是每次迭代都会创建一个新的列表。

有没有可以设置的编译器标志,让编译器做一些静态分析,并将循环不变代码提取到循环之外?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-12-13 15:07:04

我想很多人都被你的例子迷住了,错过了你真正的问题。

不,visual studio中没有内置的简单工具可以静态地执行此操作(无需运行程序)。如果您可以运行程序并执行相关的代码,那么有两个工具可以帮助您(您的单元测试具有100%的代码覆盖率,不是吗;)。一个是profiler built in to Visual Studio,另一个是CLR profiler

我从未使用过CLR分析器,它可能只是visual studio中的旧版本。visual studio探查器可以显示是否正在创建大量对象(示例中的列表),并查看在代码中创建这些对象的位置。它还可以显示执行时间最长的代码行,这样您就可以知道将精力集中在哪里来加快程序的执行速度。

如果您在运行分析器时遇到特定问题,我建议您在该问题上打开一个新问题,

票数 1
EN

Stack Overflow用户

发布于 2012-12-13 14:25:27

你为什么不自己把它拔出来呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var fruits = new [] {"Orange", "Apple", "Pear" };
var sortedData = data.OrderBy(x => fruits.IndexOf(x.Name));
foreach (var d in sortedData) {

此外,如果这些循环都在同一个类中,则使fruits成为该类的static readonly成员。

票数 1
EN

Stack Overflow用户

发布于 2012-12-13 14:20:48

您可以将LINQ更改为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Note the call to ToArray()
var sortedData = data.OrderBy(...).ToArray();

在这种情况下,语句应该执行一次,并且循环的源代码将是恒定的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13861756

复制
相关文章
SHELL(bash)脚本编程六:执行流程
bash命令的执行分为四大步骤:输入、解析、扩展和执行。 本文将详述bash命令的一般处理过程: 如图所示
用户5030870
2019/04/11
1.7K0
SHELL(bash)脚本编程六:执行流程
技术|通过 ssh 会话执行 bash 别名
我在远程主机上上设置过一个叫做file_repl的bash别名。当我使用ssh命令登录远程主机后,可以很正常的使用这个别名。然而这个bash别名却无法通过ssh来运行,像这样:
用户8710643
2021/07/12
6770
Apache 通过CGI执行脚本
告诉服务器cgi和pl后缀的文件都是cgi脚本,编写python脚本,并放入/var/www/cgi-bin/目录下
微软技术分享
2022/12/28
6740
bash脚本编程
编程语言: 编译器,解释器 编程语言:机器语言,汇编语言、高级语言 静态语言:编译型语言 强类型(变量) 关键字: 事先转换成可执行格式 c,c++,JAVA,C# 动态语言:解释型语言 on the fly 弱类型 边解释变执行 php,shell,python,perl(面向过程) ​ 面向对象:shell,c 面向对象:JAVA,Python,perl,C++ ​ bash:脚本解释器 编程能力: 脚本编程 变量:内存空间,命名的内存空间(可以回收) 内存:编址的存储
若与
2018/07/04
1.3K0
bash 脚本 learning
linux bash 脚本是个好东西,能用工具搞定的就尽量避免用手敲。这里记录下学习过程中的问题。
上山打老虎了
2022/06/14
4370
PHP执行Shell脚本或Bash脚本文件并返回命令输出详情
system和exec函数可能被配置文件禁用,可以通过修改php配置文件删除被禁用的函数。
阿峰技术博客
2022/10/29
2.5K0
PHP执行Shell脚本或Bash脚本文件并返回命令输出详情
pycharm编译器设置_bash python
打开 pyCharm,在 File -> Settings -> Tools -> External Tools 中点击 “+” 。
全栈程序员站长
2022/09/30
9250
pycharm编译器设置_bash python
bash脚本 while语法
基本语法(比较常见的两种形式): 只要特定条件为真,”while” 语句就会执行 while [ condition ] do command1 command2 command3 done 或者 while [ condition ]; do command1 command2 command3 done 说明:  行1,首先进行条件测试,如果传回值为0(条件测试为真),则进入循环,执行命令区域,否则 不进入循环,介绍while 命令  行3,执行命令区域,这些命令中,
joshua317
2018/04/16
8480
bash脚本 while语法
Bash脚本编程(原创)
Bash,Unix shell的一種,在1987年由布萊恩·福克斯為了GNU計劃而编写。1989年釋出第一個正式版本,原先是計劃用在GNU作業系統上,但能运行于大多数类Unix系统的操作系统之上,包括Linux與Mac OS X v10.4都將它作為預設shell。它也被移植到Microsoft Windows上的Cygwin與MinGW,或是可以在MS-DOS上使用的DJGPP專案。在Novell NetWare與Andriod在上也有移植。1990年後,Chet Ramey成为了主要的维护者。為Bourne shell的後繼相容版本與開放原始碼版本,它的名稱來自Bourne shell(sh)的一个双关语(Bourne again / born again):Bourne-Again SHell。
用户2645267
2018/08/04
1.4K0
常用bash脚本功能
参考:https://stackoverflow.com/questions/3601515/how-to-check-if-a-variable-is-set-in-bash
YP小站
2021/11/26
9000
Linux笔记------bash脚本
<https://www.runoob.com/linux/linux-shell-basic-operators.html
来杯Sherry
2023/05/25
1.7K0
Bash脚本编程之数组
array=( "${array[@]}" "new element" )或array[${#array[*]}]="new element"
枇杷李子橙橘柚
2019/05/26
7060
Bash脚本编程之引用
引用的意思是用引号括起一个字符串,以保护字符串中的特殊字符不被shell或shell脚本重新解释或扩展:
枇杷李子橙橘柚
2019/05/26
7950
Bash脚本编程之subshell
(command1;command2;command3;...)会启动子shell。子shell可以访问父shell的变量,对父shell变量的改动只在子shell中有效;子shell中定义的变量是局部变量,外部不能访问:
枇杷李子橙橘柚
2019/05/26
8600
bash 脚本中嵌入 expect
在 中执行一些命令时总是需要交互式的输入信息,如 等等,这可以起到提醒用户的作用,也更加保险。但是有的时候在执行自动化脚本时并不希望一直进行交互式的操作,所以 便显得极为有用。
f_zyj
2021/12/07
2.1K0
unix 的 bash shell 脚本
1. test01   test02 1 200    1 100 2 500    2 300 3 200    3 50 4 100    4 150 输出 200 100 100 500 300 200 300 50  150 100 150 -50 awk 减法数组 awk ‘ NR == FNR { a[NR]=$2 } NR != FNR { print a[FNR], $2,(a[FNR]-$2)} ' /root/test* 2. 123abc456 45
bear_fish
2018/09/20
1.5K0
《Bash 脚本教程》发布了
Bash 是 Linux 和 Mac 的默认 Shell(命令行环境),系统管理和服务器开发都需要它。虽然不难,但是语法很怪异,比如计算字符串的长度要写成${#varname},根本记不住,需要查手册。网上找不到简明扼要的中文教程,我很早就想整理一个,方便自己日后使用。
ruanyf
2020/04/17
9160
《Bash 脚本教程》发布了
Bash 脚本 set 命令教程
服务器的开发和管理离不开 Bash 脚本,掌握它需要学习大量的细节。 set命令是 Bash 脚本的重要环节,却常常被忽视,导致脚本的安全性和可维护性出问题。本文介绍它的基本用法,让你可以更安心地使用
ruanyf
2018/04/12
1.7K0
Bash 脚本 set 命令教程
Linux Bash脚本练习3
1.任务描述: 写一个脚本实现如下功能: manageuser.sh --add user1,user2,user3,... manageuser.sh --del user1,user2,user3,... manageuser.sh --help 要求,如果用户不存在,才能添加,并用户密码同用户名;如果delete存在用户,那么用户的家目录一同delete掉;提供--help进行用户提示。 #!/bin/bash # if [ $# -lt 1 ] ; then    echo "no arg
py3study
2020/01/14
2.5K0
Bash 脚本 set 命令教程
服务器的开发和管理离不开 Bash 脚本,掌握它需要学习大量的细节。 set命令是 Bash 脚本的重要环节,却常常被忽视,导致脚本的安全性和可维护性出问题。本文介绍它的基本用法,让你可以更安心地使
崔庆才
2018/06/25
1.5K0

相似问题

Apache重写以添加html扩展

11

python:重写导入的类以扩展功能

11

扩展javascript选项以添加功能

20

L4.2 :扩展扩展\TestBase的类

10

扩展ngClick以添加附加功能

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文