Tag: C#的

好奇心:为什么expression式编译时运行速度比最小的DynamicMethod快?

我目前正在做一些最后的措施优化,主要是为了好玩和学习,并发现了一些让我留下几个问题的东西。 一,问题: 当我通过使用DynamicMethod在内存中构造一个方法,并使用debugging器时,在反汇编视图中查看代码时,有什么办法让我进入生成的汇编代码? debugging器似乎只是对我整个方法 或者,如果这是不可能的,是否有可能以某种方式将生成的IL代码作为程序集保存到磁盘,以便我可以使用Reflector对其进行检查? 为什么我的简单添加方法(Int32 + Int32 => Int32)的Expression<…>版本比最小的DynamicMethod版本运行得更快? 这是一个简短而完整的程序,演示。 在我的系统上,输出是: DynamicMethod: 887 ms Lambda: 1878 ms Method: 1969 ms Expression: 681 ms 我期望lambda和方法调用具有更高的值,但DynamicMethod版本的速度始终低于30-50%(可能由于Windows和其他程序而异)。 任何人都知道原因? 这是该计划: using System; using System.Linq.Expressions; using System.Reflection.Emit; using System.Diagnostics; namespace Sandbox { public class Program { public static void Main(String[] args) { DynamicMethod method = new DynamicMethod("TestMethod", typeof(Int32), new […]

C#5asynchronous/等待 – 它是*并发*?

我一直在考虑C#5中的新asynchronous的东西,并提出了一个特定的问题。 我知道await关键字是一个简洁的编译器技巧/语法糖来实现continuation的传递 ,其余的方法被分解成Task对象并排队等待运行,但是控制返回到调用方法。 我的问题是,我听说目前这一切都在一个单一的线程。 这是否意味着这种asynchronous的东西实际上只是将继续代码转换为Task对象,然后在每个任务完成之后调用Application.DoEvents() ,然后再启动下一个任务? 还是我错过了什么? (问题的这一部分是修辞 – 我完全知道我错过了什么 :)) 提前谢谢了。

将variables转换为仅在运行时已知的types?

foreach (var filter in filters) { var filterType = typeof(Filters); var method = filterType.GetMethod(filter, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Static); if (method != null) { var parameters = method.GetParameters(); Type paramType = parameters[0].ParameterType; value = (string)method.Invoke(null, new[] { value }); } } 我怎样才能将value赋予paramType ? value是一个string , paramType可能只是一个基本的types,如int , string或float 。 如果没有转换是可能的,我很酷,抛出一个exception。

FD_CLOEXEC fcntl()标志是做什么的?

像这样: if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) { … 虽然我读过man fcntl ,但是我弄不清楚它的function。

适合点的矩形

我试图围绕一组8个2D点拟合一个矩形,同时尽量减less覆盖面积 。 例: 矩形可以被缩放和旋转。 但是,它需要保持一个矩形。 我的第一个方法是强制每一个可能的旋转,尽可能接近矩形,并计算覆盖面积。 那么最适合的将是最小面积的旋转。 但是,这听起来不是最好的解决scheme。 有没有更好的方法来做到这一点?

数据库部署策略(SQL Server)

我正在寻找一种方法来进行日常部署,并保持数据库脚本与版本一致。 目前,我们有一个相当不错的方式来部署我们的来源,我们有单位代码覆盖,持续集成和回滚程序。 问题是保持数据库脚本与发行版一致。 每个人似乎都尝试在testing数据库上的脚本,然后在实时运行它们,当ORM映射更新(也就是,更改生效),然后它拿起新的列。 第一个问题是,任何脚本都不能写在任何地方,一般每个人都“尝试”把它们放到一个Subversion文件夹中,但是一些懒惰的人只是直接运行脚本,大部分时间都没有人知道谁做了什么什么数据库。 第二个问题是,我们有4个testing数据库,它们总是不符合要求,真正将它们排成一行的唯一方法是从活动数据库中进行恢复。 我深信,像这样的过程需要简单,直接和易于使用,以帮助开发人员,而不是阻碍他们。 我正在寻找的技术/想法使开发人员很容易logging他们的数据库脚本,使他们可以作为发布程序的一部分运行。 开发人员希望遵循的过程 。 任何故事,用例甚至链接都会有所帮助。

System.Runtime.Serialization.Json命名空间在哪里?

我已经将System.Runtime.Serialization dll引用添加到我的项目,但仍然无法findSystem.Runtime.Serialization.Json命名空间,因此无法findDataContractJsonSerializer类。 我在这里错过了什么?

在C ++中使用不寻常的typedef

我遇到了C ++中关键字typedef的新用法。 这个typedef语句是什么意思? int typedef foo;

similar_text是如何工作的?

我刚刚find了similar_text函数,并且正在玩弄它,但是百分比输出总是令我惊讶。 看下面的例子。 我试图find在php上提到的algorithm使用的相关信息: similar_text() Docs : <?php $p = 0; similar_text('aaaaaaaaaa', 'aaaaa', $p); echo $p . "<hr>"; //66.666666666667 //Since 5 out of 10 chars match, I would expect a 50% match similar_text('aaaaaaaaaaaaaaaaaaaa', 'aaaaa', $p); echo $p . "<hr>"; //40 //5 out of 20 > not 25% ? similar_text('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'aaaaa', $p); echo $p . "<hr>"; //9.5238095238095 […]

NOP雪橇是如何工作的?

我一直在打开我的头,找不到一个很好的答案来回答这个问题。 我知道nop sled是一种用于规避缓冲区溢出攻击中堆栈随机化的技术,但我无法理解它是如何工作的。 什么是一个简单的例子来说明这种方法? 128字节的nop sled是什么意思?