问题列表 - 第4349页

在.Net中,出于性能原因,我是否应该通过引用传递结构?

在我的C#应用​​程序中,我有一个大型结构(176字节),每秒可能传递一十万次到一个函数.然后,该函数只需要一个指向struct的指针,并将指针传递给非托管代码.函数和非托管代码都不会对结构进行任何修改.

我的问题是,我应该通过值或引用将结构传递给函数吗?在这种特殊情况下,我的猜测是,通过引用传递比将176个字节推入调用堆栈要快得多,除非JIT碰巧认识到结构永远不会被修改(我的猜测是因为结构体不能识别这个结构)地址被传递给非托管代码)并优化代码.

既然我们正在使用它,那么让我们回答更常见的情况,即函数没有将结构的指针传递给非托管代码,而是对结构的内容执行一些只读操作.通过引用传递结构会更快吗?在这种情况下,JIT会认识到结构永远不会被修改,从而进行优化吗?据推测,通过引用传递一个1字节的结构并不是更有效,但是如果有的话,通过引用传递结构的结构大小会更好吗?

谢谢.

编辑:

如下所述,还可以为常规使用创建"等效"类,然后在传递给非托管代码时使用结构.我在这里看到两个选项:

1)创建一个简单包含结构的"包装器"类,然后在必要时将指针指向结构并传递给非托管代码.我看到的一个潜在问题是钉扎有其自身的性能影响.

2)创建一个等价的类,当需要struct时,其字段被复制到struct.但是复制需要花费很多时间,而且在我看来首先要通过引用来打败它.

编辑:

正如下面提到的几次,我当然可以只测量每种方法的性能.我做到这一点,并发布结果.但是,我仍然有兴趣从知识分子的角度看待人们的答案和推理.

.net c# optimization

16
推荐指数
2
解决办法
3303
查看次数

有没有什么好的课程可以学习面向对象的编程?

我正在寻找一些关于面向对象编程的优秀课程.到目前为止,我已经编程了大约4年,但我不觉得我对OO有一个SOLID掌握.

你是怎么学习的?

oop

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

格式化数字的最佳设计模式是什么?

我需要编写将根据指定的选项格式化值的代码.

现在可以选择几种格式化选项:使用指定的精度舍入/截断数字,添加前缀(例如$)或后缀(例如%),分组数千(应用逗号),添加数字缩写(KMB).

因此,例如,数字1857可以显示为$ 2K或$ 1.86K或$ 1,867

起初我考虑过使用Decorator模式,但我不确定,因为格式化程序应该按特定顺序应用,例如,首先我需要应用KMB转换:1857 - > 1.857 K,然后将其舍入1.86 K.

你有什么建议吗?

谢谢,matali

java formatting design-patterns

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

根据电话号码计算人的时区(GMT偏移量)?

我已经要求根据他们的电话号码显示一个人的当地时间.我知道我们当地的GMT偏移量,所以我可以通过我们将美国zip_code链接到GMT偏移量(例如-5)的数据库表来处理美国手机.但我不知道如何转换非美国电话号码或国名(这些人显然没有邮政编码).

如果您在意,我的雇主学院希望征求我们的校友捐款,并在合理的时间内完成.

对不起,我没有明确表示我正在考虑家庭电话号码.所以漫游不是问题.我正在寻找一些参考表或Oracle应用程序,我可以从中获取此信息.

谢谢,

sql oracle

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

以美元结尾的字符串

在我的汇编语言类中,我们的第一个任务是编写一个程序,在DOS中打印出一个简单的以美元结尾的字符串.它看起来像这样:

BITS 32
    global _main

section .data
    msg db "Hello, world!", 13, 10, ’$’

section .text
_main:
mov ah, 9
mov edx, msg
int 21h
ret
Run Code Online (Sandbox Code Playgroud)

据我了解,$符号用来像空确实在C.但是,我该怎么办,如果我想要把一个美元符号字符串中终止刺(像我想打印出"它的成本$ 30")?这似乎是一个简单的问题,但我的教授不知道答案,我似乎没有使用谷歌搜索找到它.

console assembly dos nasm

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

使用Javascript以编程方式剪辑/剪切图像

是否有关于如何剪切或剪切大图像的文档/教程,以便用户只能看到该图像的一小部分?假设源图像是10帧动画,端对端堆叠,因此它非常宽.我怎么能用Javascript一次只显示1个任意帧的动画?

我已经研究过这种"CSS Spriting"技术,但我认为我不能在这里使用它.源图像是从服务器动态生成的; 在从服务器返回之前,我不知道每个帧的总长度或大小.我希望我可以这样做:

var image = getElementByID('some-id');

image.src = pathToReallyLongImage;

// Any way to do this?!
image.width = cellWidth;
image.offset = cellWidth * imageNumber;
Run Code Online (Sandbox Code Playgroud)

javascript image

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

如何发现机器类型?

我想发现大量机器的机器架构类型.我有每台机器的主机名.这些机器有Debian 4 linux,SunOS 9,SunOS 10或Apple Darwin.所有都是类似unix的,但有细微差别.

我想知道: - 架构(x86,x86_64,ia64,sparc,powerpc ......) - 处理器类型(intel pentium,pentium pro,pentium II,sparc,powerpc,itanium,athlon,core 2 duo,cytrix等...) - 处理器数量

当心,我想要机器的"类​​型".使用'uname'的愚蠢方法对Sun不起作用,当机器实际上是'x86_64'但操作系统是32位时,它也返回'i686'之类的东西./ proc/cpuinfo也不起作用,事情变得更复杂,因为有些机器没有安装C编译器(我确定它们都有sh,可能是python或perl,dunno).

提前致谢!!:)

linux macos shell scripting solaris

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

使用Google托管的jquery-ui.js让主题在jQueryUI中工作的问题

我是jQueryUI的新手,我想我忽略了一些非常基本的东西......

快速描述我的问题

我使用ThemeRoller下载了一个jQueryUI主题,它也生成了一个jQueryUI javascript文件.我宁愿使用Google(http://ajax.googleapis.com/ajax/libs/jqueryui/1.5.3/jquery-ui.min.js)托管的文件,但是当我这样做时,主题就不会被选中.我发现很难相信我必须使用ThemeRoller生成的脚本,因为如果是这种情况那么谷歌托管的jQueryUI将完全没用!我在这做错了什么?


更多细节

所以我从Themeroller下载了"Smoothness"主题如下:

  1. 转到ThemeRoller网站.
  2. 单击"图库"按钮.
  3. 点击"平滑度"主题下方的"下载"按钮.
  4. 将.zip文件(使用文件夹名称)解压缩到本地目录(例如C:\jqueryui_test).

现在,我test.html在同一目录中创建了一个非常简单的文件,其中包含以下内容:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link type="text/css" href="ui.all.css" rel="stylesheet" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.5.3/jquery-ui.min.js"></script>
<script type="text/javascript">
$(function() {
  $("#datepicker").datepicker({inline: true});
});
</script>
</head>
<body>
<div id="datepicker"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

当我test.html在浏览器中打开时,日期选择器组件没有样式(没有背景图像或任何东西).但是,如果我将Google托管的jquery-ui.min.js行更改为ThemeRoller生成的行(<script type="text/javascript" src="jquery.ui.all.js"></script>),则页面将按预期进行样式设置.


更新 我接受的答案并非真正的最终解决方案,但它让我走上了正确的道路.事实证明,如果你只是下载JQueryUI,你会得到很多东西.Google托管的文件只能替换"jquery.ui.all.js"文件,但您仍需要"themes"目录.另外,Themeroller主题在1.5.3(甚至是"1.5.3用户"链接)上也不能很好地工作.由于这只是一个管理页面,我只是使用了内置的"flora"主题.看起来jQuery UI 1.6要好得多,但它还没有"稳定"发布(截至本文写作......).

jquery jquery-ui themeroller

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

Java:在Windows和Linux上处理注销或关闭

除了使用JNI之外,Java GUI应用程序是否有办法响应系统关闭或注销事件?(在Windows上,JNI会在Linux上使用WM_QUERYENDSESSION吗?)

该方法应该允许程序提示用户保存等,然后继续注销过程.

java linux windows swing

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

在DELPHI中向克隆的TClientDataset添加字段

嗨,我有一个主和克隆的TClientData集

CdsCloned.CloneCursor(CdsMaster,true);
Run Code Online (Sandbox Code Playgroud)

CdsMaster有两个字段'SessionId'和'UserID',CdsCloned将具有相同的字段

问题: 是否可以在不更改CdsMaster的情况下向CdsCloned添加额外的字段?

delphi

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