小编Kal*_*evi的帖子

Haxe&NME:每像素位图操作的最快方法

这是一个用于测试NME针对不同构建(Windows c ++,Flash)的像素级操作性能的小项目.

它用于BitmapData.setPixel逐个修改像素(每帧320x240).的c + +在22 FPS建立运行,并且闪光建立围绕〜100 FPS.是什么原因导致C++版本与闪存相比性能大幅下降?如何使用C++构建改进代码以获得更高的FPS?

Mandelbrot.hx

import nme.display.Sprite;
import nme.display.Bitmap;
import nme.display.BitmapData;
import nme.text.TextField;
import nme.events.Event;
import nme.events.TimerEvent;
import nme.utils.Timer;
import nme.geom.Matrix;
import nme.geom.Rectangle;
import nme.utils.ByteArray;

class Mandelbrot
{
    public static function main() : Void
    {
        new Mandelbrot();
    }

    public var pixels:Array<Array<Int>>;

    public var colorModifier:Int;
    private var bitmapData:BitmapData;
    private var bigBitmapData:BitmapData;

    private var fps:TextField;

    private var width:Int;
    private var height:Int;
    private var matrix:Matrix;

    public function new() 
    {
        width = 320; //Std.int(flash.Lib.current.stage.stageWidth/2); …
Run Code Online (Sandbox Code Playgroud)

haxe

12
推荐指数
1
解决办法
5824
查看次数

朱莉娅:了解任务切换何时发生

我找不到关于@async宏的详细文档.从关于并行性的文档中我了解到,在Julia进程中只使用了一个系统线程,并且在yieldto函数的帮助下有明确的任务切换- 如果我错了,请纠正我.

对我来说,很难理解这些任务切换只是通过查看代码来实现,并且知道它何时发生似乎至关重要.

据我所知yieldto,代码中的某个地方(或代码调用的某个函数)需要确保系统不会只停留在一个任务中.

例如,当存在read操作时,在读取内部可能存在wait调用,并且在执行中wait可能存在yieldto调用.我认为没有yieldto电话,代码就会卡在一个任务中; 但是运行以下示例似乎证明了这个假设是错误的.

@async begin # Task A
    while true
        println("A")
    end    
end

while true # Task B
  println("B")
end
Run Code Online (Sandbox Code Playgroud)

此代码生成以下输出

BA
BA
BA
...
Run Code Online (Sandbox Code Playgroud)

我很不清楚@async在上面的代码中由宏创建的任务内部发生任务切换的位置.

如何查看代码中发生任务切换的点?

asynchronous julia

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

如何在Mono/Windows上使用gecko-sharp嵌入Gecko?

Gecko是Firefox的渲染引擎.使用gecko-sharp可以将其嵌入到任何Mono/GTK#程序中.有一个名为GladeSharpBrowser的示例应用程序用于执行此操作.我可以设法使用修改后的项目文件来构建它,但它正在崩溃.这可以帮助您重现问题:

我使用了SharpDevelop 3.0和一个教程来安装我的Mono 2.2.我确保它使用ProcMon调用Mono的gmcs进行编译.设置SharpDevelop后,必须修改BrowserSharp.csproj,以便与Mono一起编译.

还有一条警告信息:

发现同一依赖程序集的不同版本之间存在冲突.

这很奇怪,因为所有组件都是由Mono提供的组件.

当然,还有其他方法,如GeckoFX,但我特别感兴趣的是使用Mono以独立于平台的方式进行.

.net c# mono gecko

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

System.Collections.Immutable 类型:为什么没有 .Equals

var a = ImmutableList<int>.Empty.Add(1).Add(2).Add(3);
var b = ImmutableList<int>.Empty.Add(1).Add(2).Add(3);

Console.WriteLine(a.Equals(b)); // False
Run Code Online (Sandbox Code Playgroud)

在上面的代码a.Equals(b)调用中Object.Equals,因为ImmutableList<T>没有覆盖Equals(object),并且ImmutableList<T>引用类型Object.Equals会(无用的)引用比较。

问题:为什么不ImmutableList<T>覆盖.Equals?将每个包含的对象与每个包含的对象进行比较.Equals并根据这些比较返回结果将是直接的并且期望。测试框架的其余部分甚至是一致的(请参阅 参考资料class String

注意:上面的代码是用 System.Collections.Immutable.1.1.38-beta-23516

.net c# immutability

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

为什么NuGet下载看似不必要的依赖?

当安装System.Collections.ImmutableNuGet下载程序集时System.Runtime,即使我已经使用.NET 4.6.1安装了该程序集.

此外,lib下的目录(如packages\System.Runtime.4.0.0\lib \net45)不包含dll文件,只包含空文件_._.

为什么会这样?为什么这有必要?我在这里错过了什么?

NuGet日志:

Install-Package System.Collections.Immutable -Version 1.1.37
Attempting to gather dependency information for package 'System.Collections.Immutable.1.1.37' with respect to project 'ConsoleApplication1', targeting '.NETFramework,Version=v4.6.1'
Attempting to resolve dependencies for package 'System.Collections.Immutable.1.1.37' with DependencyBehavior 'Lowest'
Resolving actions to install package 'System.Collections.Immutable.1.1.37'
Resolved actions to install package 'System.Collections.Immutable.1.1.37'
  GET https://www.nuget.org/api/v2/package/System.Collections/4.0.0
Installing System.Collections 4.0.0.
Adding package 'System.Collections.4.0.0' to folder 'd:\workspace\ConsoleApplication1\packages'
Added package 'System.Collections.4.0.0' to folder 'd:\workspace\ConsoleApplication1\packages'
Added package 'System.Collections.4.0.0' to 'packages.config'
Successfully installed 'System.Collections …
Run Code Online (Sandbox Code Playgroud)

c# nuget

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

类内部委托的默认值

using System;

public delegate void Printer(string s);

class Program
{
    public static void Main(string[] args)
    {
        Printer p = new Printer(delegate {});
        p+= myPrint;
        p("Hello");
        Console.ReadKey(true);
    }

    public static void myPrint(string s)
    {
        System.Console.WriteLine(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

好像我必须使用空的匿名函数初始化一个委托才能+=以后使用.当我省略该new条款时,它p会成为null并且+=不起作用,这是有道理的.

现在,当我有一个带有委托实例的类时,我可以执行以下操作:

using System;

public delegate void Printer(string s);

class Program
{
    public static void Main(string[] args)
    {
        A a = new A();
        a.p += myPrint;
        a.p("Hello");
        Console.ReadKey(true);
    }

    public static void myPrint(string s) …
Run Code Online (Sandbox Code Playgroud)

c# delegates

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

标签 统计

c# ×4

.net ×2

asynchronous ×1

delegates ×1

gecko ×1

haxe ×1

immutability ×1

julia ×1

mono ×1

nuget ×1