小编ggf*_*416的帖子

为什么Math.DivRem效率低下?

在我的计算机中,此代码需要17秒(1000万次):

static void Main(string[] args) {
   var sw = new Stopwatch(); sw.Start();
   int r;
   for (int i = 1; i <= 100000000; i++) {
      for (int j = 1; j <= 10; j++) {
         MyDivRem (i,j, out r);
      }
   }
   Console.WriteLine(sw.ElapsedMilliseconds);
}

static int MyDivRem(int dividend, int divisor, out int remainder) {
   int quotient = dividend / divisor;
   remainder = dividend - divisor * quotient;
   return quotient;
}
Run Code Online (Sandbox Code Playgroud)

而Math.DivRem需要27秒.

.NET Reflector为我提供了Math.DivRem的代码:

public static int DivRem(int a, int b, out …
Run Code Online (Sandbox Code Playgroud)

.net optimization

34
推荐指数
3
解决办法
5688
查看次数

使用Sub Main或表单启动对象启动VB.NET GUI应用程序?

有没有理由在模块的Sub Main中启动用VB.NET编写的GUI程序(Windows应用程序),而不是直接在表单中?

编辑:程序不会采用任何命令行参数,它将始终作为GUI程序执行.

vb.net winforms

14
推荐指数
2
解决办法
4万
查看次数

此表达式具有int类型,但此处与类型unit一起使用

我试图在F#中获得此vb.net代码的完全等效(不起作用):

Function FastPow(ByVal num As Double, ByVal exp As Integer) As Double
   Dim res As Double = 1
   If exp < 1 Then
      If exp = 0 Then Return res
      exp = -exp
      num = 1 / num
   End If
   Do While exp > 1
      If exp Mod 2 = 1 Then 
         res = res * num
      num = num * num
      exp = exp >> 1
   Loop
   Return res * num
End Function
Run Code Online (Sandbox Code Playgroud)

我写了这个:

let FastPow num exp = …
Run Code Online (Sandbox Code Playgroud)

syntax f#

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

inout参数有很好的用途吗?

是否有很好用的inout(参考.NET中的C#,byref(比如输出参数)参数)?
我觉得由参数用作输入和返回值引起的混淆比out参数的数量增加或返回数组或返回自定义类更糟糕.

.net calling-convention

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

慢速方法调用

方法调用真的很慢或者我的计算机出了什么问题吗?

static void Main(string[] args) {
    Stopwatch sw = new Stopwatch(); sw.Start(); 
    for (int i = 0; i < 10000000; i++) {
        double z = Math.Pow(i,2);
    }
    Console.WriteLine(sw.ElapsedMilliseconds);
    sw = Stopwatch.StartNew();
    for (int i = 0; i < 10000000; i++) {
        Noop();
    }
    Console.WriteLine(sw.ElapsedMilliseconds);
}

static void Noop() { }
Run Code Online (Sandbox Code Playgroud)

第一个循环需要1600 - 1700毫秒,而第二个循环在我的系统中需要3100 - 3200毫秒(Celeron D 2.53 Ghz 512 MB RAM Windows XP SP3 .NET 3.5).这是一个命令行项目.我用VB.Net得到了类似的结果.

编辑:我想我找到了答案.

.net performance

0
推荐指数
1
解决办法
300
查看次数