在我的C#应用程序中,我有一个大型结构(176字节),每秒可能传递一十万次到一个函数.然后,该函数只需要一个指向struct的指针,并将指针传递给非托管代码.函数和非托管代码都不会对结构进行任何修改.
我的问题是,我应该通过值或引用将结构传递给函数吗?在这种特殊情况下,我的猜测是,通过引用传递比将176个字节推入调用堆栈要快得多,除非JIT碰巧认识到结构永远不会被修改(我的猜测是因为结构体不能识别这个结构)地址被传递给非托管代码)并优化代码.
既然我们正在使用它,那么让我们回答更常见的情况,即函数没有将结构的指针传递给非托管代码,而是对结构的内容执行一些只读操作.通过引用传递结构会更快吗?在这种情况下,JIT会认识到结构永远不会被修改,从而进行优化吗?据推测,通过引用传递一个1字节的结构并不是更有效,但是如果有的话,通过引用传递结构的结构大小会更好吗?
谢谢.
编辑:
如下所述,还可以为常规使用创建"等效"类,然后在传递给非托管代码时使用结构.我在这里看到两个选项:
1)创建一个简单包含结构的"包装器"类,然后在必要时将指针指向结构并传递给非托管代码.我看到的一个潜在问题是钉扎有其自身的性能影响.
2)创建一个等价的类,当需要struct时,其字段被复制到struct.但是复制需要花费很多时间,而且在我看来首先要通过引用来打败它.
编辑:
正如下面提到的几次,我当然可以只测量每种方法的性能.我会做到这一点,并发布结果.但是,我仍然有兴趣从知识分子的角度看待人们的答案和推理.
我正在寻找一些关于面向对象编程的优秀课程.到目前为止,我已经编程了大约4年,但我不觉得我对OO有一个SOLID掌握.
你是怎么学习的?
我需要编写将根据指定的选项格式化值的代码.
现在可以选择几种格式化选项:使用指定的精度舍入/截断数字,添加前缀(例如$)或后缀(例如%),分组数千(应用逗号),添加数字缩写(KMB).
因此,例如,数字1857可以显示为$ 2K或$ 1.86K或$ 1,867
起初我考虑过使用Decorator模式,但我不确定,因为格式化程序应该按特定顺序应用,例如,首先我需要应用KMB转换:1857 - > 1.857 K,然后将其舍入1.86 K.
你有什么建议吗?
谢谢,matali
我已经要求根据他们的电话号码显示一个人的当地时间.我知道我们当地的GMT偏移量,所以我可以通过我们将美国zip_code链接到GMT偏移量(例如-5)的数据库表来处理美国手机.但我不知道如何转换非美国电话号码或国名(这些人显然没有邮政编码).
如果您在意,我的雇主学院希望征求我们的校友捐款,并在合理的时间内完成.
对不起,我没有明确表示我正在考虑家庭电话号码.所以漫游不是问题.我正在寻找一些参考表或Oracle应用程序,我可以从中获取此信息.
谢谢,
炖
在我的汇编语言类中,我们的第一个任务是编写一个程序,在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")?这似乎是一个简单的问题,但我的教授不知道答案,我似乎没有使用谷歌搜索找到它.
是否有关于如何剪切或剪切大图像的文档/教程,以便用户只能看到该图像的一小部分?假设源图像是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) 我想发现大量机器的机器架构类型.我有每台机器的主机名.这些机器有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).
提前致谢!!:)
我是jQueryUI的新手,我想我忽略了一些非常基本的东西......
我使用ThemeRoller下载了一个jQueryUI主题,它也生成了一个jQueryUI javascript文件.我宁愿使用Google(http://ajax.googleapis.com/ajax/libs/jqueryui/1.5.3/jquery-ui.min.js)托管的文件,但是当我这样做时,主题就不会被选中.我发现很难相信我必须使用ThemeRoller生成的脚本,因为如果是这种情况那么谷歌托管的jQueryUI将完全没用!我在这做错了什么?
所以我从Themeroller下载了"Smoothness"主题如下:
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要好得多,但它还没有"稳定"发布(截至本文写作......).
除了使用JNI之外,Java GUI应用程序是否有办法响应系统关闭或注销事件?(在Windows上,JNI会在Linux上使用WM_QUERYENDSESSION吗?)
该方法应该允许程序提示用户保存等,然后继续注销过程.
嗨,我有一个主和克隆的TClientData集
CdsCloned.CloneCursor(CdsMaster,true);
Run Code Online (Sandbox Code Playgroud)
CdsMaster有两个字段'SessionId'和'UserID',CdsCloned将具有相同的字段
问题: 是否可以在不更改CdsMaster的情况下向CdsCloned添加额外的字段?