在过去的日子里,有一些技巧(通常是用于遮挡屏幕外的帧缓冲区),将大块内存从一个位置复制到另一个位置.
现在我正在使用C#,我发现需要将一个字节数组(大小约为32k)从一个内存位置移动到另一个内存位置大约每秒60次.
不知何故,我不认为for循环中的逐字节副本在这里是最佳的.
有没有人知道在保持纯托管代码的同时做这种工作的好方法?
如果没有,我愿意做一些P/Invoking或进入不安全模式,但如果我可以出于跨平台原因,我想保持管理.
编辑:我写的一些基准测试代码只是为了好玩:
字节Byte:15.6192
每个循环4个字节:15.6192
阻止复制:0
Byte[] src = new byte[65535];
Byte[] dest = new byte[65535];
DateTime startTime, endTime;
startTime = DateTime.Now;
for (int k = 0; k < 60; k++)
{
for (int i = 0; i < src.Length; i++)
{
dest[i] = src[i];
}
}
endTime = DateTime.Now;
Console.WriteLine("Byte by Byte: " + endTime.Subtract(startTime).TotalMilliseconds);
startTime = DateTime.Now;
for (int k = 0; k < 60; k++)
{
int i = 0;
while (i < src.Length) …
Run Code Online (Sandbox Code Playgroud) 我看到一篇关于使用VBA在VSTO托管代码中创建Excel UDF的文章:http://blogs.msdn.com/pstubbs/archive/2004/12/31/344964.aspx.
但是我希望使用VSTO 2005 SE在C#Excel插件中工作,任何人都可以帮忙吗?
我尝试了Romain指出的技术,但在尝试加载Excel时,我得到以下异常:
无法找到或无法加载自定义程序集.您仍然可以编辑和保存文档.....
细节:
Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))
************** Exception Text **************
System.Runtime.InteropServices.COMException (0x80020005): Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))
at Microsoft.Office.Interop.Excel._Application.Run(Object Macro, Object Arg1, Object Arg2, Object Arg3, Object Arg4, Object Arg5, Object Arg6, Object Arg7, Object Arg8, Object Arg9, Object Arg10, Object Arg11, Object Arg12, Object Arg13, Object Arg14, Object Arg15, Object Arg16, Object Arg17, Object Arg18, Object Arg19, Object Arg20, Object Arg21, Object Arg22, Object …
Run Code Online (Sandbox Code Playgroud) 我知道谷歌搜索我可以找到一个合适的答案,但我更喜欢听你的个人(也许是技术)意见.
抛出异常时Java和C#之间差异的主要原因是什么?
在Java中,抛出异常的方法的签名必须使用"throws"关键字,而在C#中,如果可以抛出异常,则在编译时不知道.
在Java中混合使用原始数据类型和它们各自的包装类可能会导致很多错误.以下示例说明了此问题:
int i = 4;
...
if (i == 10)
doStuff();
Run Code Online (Sandbox Code Playgroud)
稍后你会想要变量i被定义或未定义,所以你将上面的实例改为:
Integer i = null;
Run Code Online (Sandbox Code Playgroud)
现在,相等检查失败.
始终使用原始包装类是不是很好的Java实践?显然它会早点出现一些错误,但这有什么缺点?它是否会影响性能或应用程序的内存占用?有没有鬼鬼祟祟的陷阱?
<div>
在给定的时间之后(没有使用一些可用的JavaScript库),最好的方法是逐渐消失.
我正在寻找一个非常轻量级的解决方案,不需要将巨大的JavaScript库发送到浏览器.
请解释为什么最后一个"回声"声明是空白的?我希望它在while循环中增加到值1:
#!/bin/bash
OUTPUT="name1 ip ip status" # normally output of another command with multi line output
if [ -z "$OUTPUT" ]
then
echo "Status WARN: No messages from SMcli"
exit $STATE_WARNING
else
echo "$OUTPUT"|while read NAME IP1 IP2 STATUS
do
if [ "$STATUS" != "Optimal" ]
then
echo "CRIT: $NAME - $STATUS"
echo $((++XCODE))
else
echo "OK: $NAME - $STATUS"
fi
done
fi
echo $XCODE
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下语句而不是++ XCODE方法
XCODE=`expr $XCODE + 1`
Run Code Online (Sandbox Code Playgroud)
它也不会在while语句之外打印.我想我在这里缺少一些关于变量范围的东西,但是ol'手册页并没有显示给我.
如果你能将胜利的O'Rourke的Perl解决方案与Lundh的Python解决方案进行比较,我将非常感激,因为我不知道Perl是否足以理解那里发生的事情.更具体地说,我想知道是什么赋予了Perl版本3x的优势:算法优势,C扩展的质量,其他因素?
我想基于表名在SQL Server 2005 Express数据库中查找表.在MySQL
我会使用SHOW TABLES LIKE "Datasheet%"
,但在T-SQL
此抛出一个错误(它试图寻找SHOW
存储过程并失败).
这是可能的,如果是的话,怎么样?
为了帮助我的团队编写可测试的代码,我提出了这个简单的最佳实践列表,以使我们的C#代码库更易于测试.(有些观点指的是Rhino Mocks的限制,这是C#的模拟框架,但规则也可能更普遍适用.)有没有人有他们遵循的最佳实践?
要最大限度地提高代码的可测试性,请遵循以下规则:
首先编写测试,然后编写代码.原因:这可确保您编写可测试代码,并确保每行代码都为其编写测试.
使用依赖注入设计类.原因:你无法模拟或测试无法看到的东西.
使用Model-View-Controller或Model-View-Presenter将UI代码与其行为分开.原因:允许在无法测试的部分(UI)最小化的同时测试业务逻辑.
不要编写静态方法或类. 原因:静态方法难以或无法隔离,Rhino Mocks无法模拟它们.
编程关闭接口,而不是类.原因:使用接口阐明了对象之间的关系.接口应该定义对象从其环境中需要的服务.此外,可以使用Rhino Mocks和其他模拟框架轻松模拟接口.
隔离外部依赖项.原因:无法测试未解析的外部依赖项.
将您想要模拟的方法标记为虚拟.原因:Rhino Mocks无法模拟非虚方法.
我想知道什么是帮助你进行GPGPU开发的关键因素,当然你认为哪些限制是不可接受的.
让我想到:
你有什么看法?