小编Nis*_*shi的帖子

Haskell线程堆溢出尽管总内存使用量只有22Mb?

我正在尝试并行化光线跟踪器.这意味着我有一个很长的小计算列表.vanilla程序在67.98秒内在特定场景上运行,总内存使用量为13 MB,生产率为99.2%.

在我的第一次尝试中,我使用parBuffer了缓冲区大小为50 的并行策略.我之所以选择parBuffer它是因为它只是在消耗火花的情况下遍历列表,并且不会强制列表的主干parList,这会占用大量内存因为清单很长.有了-N2它,它运行时间为100.46秒,总内存使用量为14 MB,生产率为97.8%.火花信息是:SPARKS: 480000 (476469 converted, 0 overflowed, 0 dud, 161 GC'd, 3370 fizzled)

大部分失败的火花表明火花的粒度太小,所以接下来我尝试使用策略parListChunk,将列表分成块并为每个块创建一个火花.我得到了最好的结果,大小为0.25 * imageWidth.该程序运行时间为93.43秒,总内存使用量为236 MB,生产率为97.3%.火花信息是:SPARKS: 2400 (2400 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled).我相信更大的内存使用是因为parListChunk强制列表的主干.

然后我试着编写自己的策略,懒洋洋地将列表分成块,然后传递块parBuffer并连接结果.

 concat $ withStrategy (parBuffer 40 rdeepseq) (chunksOf 100 (map colorPixel pixels))
Run Code Online (Sandbox Code Playgroud)

这运行时间为95.99秒,总内存使用量为22MB,生产率为98.8%.在所有火花都被转换并且内存使用率低得多的意义上,这是成功的,但速度没有提高.以下是事件日志配置文件的一部分图像.事件日志配置文件

正如您所看到的,由于堆溢出,线程正在停止.我尝试添加+RTS -M1G,它将默认堆大小一直增加到1Gb.结果没有改变.我读到如果堆栈溢出,Haskell主线程将使用堆中的内存,所以我也尝试增加默认堆栈大小,+RTS -M1G -K1G但这也没有影响.

还有什么我可以尝试的吗?如果需要,我可以发布更详细的内存使用情况或事件日志的分析信息,我没有全部包含它,因为它是很多信息,我不认为所有这些都是必要的.

编辑:我正在阅读有关Haskell RTS多核支持的内容,并且它讨论了每个内核都有一个HEC(Haskell执行上下文).除了别的以外,每个HEC都包含一个分配区域(它是单个共享堆的一部分).每当HEC的分配区域耗尽时,必须执行垃圾收集.似乎是一个控制它的RTS选项,-A.我试过-A32M,但没有看到任何区别.

EDIT2: 这是一个专门针对这个问题的github仓库的链接 …

parallel-processing haskell raytracing

114
推荐指数
1
解决办法
1758
查看次数

带域域的CORS cookie仅在使用jQuery AJAX的Firefox中设置

domain使用跨站点请求添加提交时,我无法设置cookie .我试图通过jquery ajax调用请求来实现这一点.

是否有可能让它在除Firefox之外的其他浏览器中工作?

一些请求标题:

Accept:application/json, text/javascript, */*; q=0.01
Content-Length:55
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Host:localhost:53862
Origin:http://localhost:54265
Referer:http://localhost:54265/
Run Code Online (Sandbox Code Playgroud)

响应标题:

Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:x-requested-with, origin, content-type, accept, Proxy-Connection
Access-Control-Allow-Methods:GET,POST,PUT,OPTIONS, DELETE
Access-Control-Allow-Origin:http://localhost:54265
Set-Cookie:Auth=l_hash=123456&user=xyzl&remember_me=false; expires=Fri, 18 Jan 2013 13:42:10 GMT; domain=localhost; path=/
Run Code Online (Sandbox Code Playgroud)

码:

$.ajax({
    type: "PUT",
    url: apiHost + "api/account/login/",
    data: $("#loginBarForm").serialize(),
    dataType: "json",
    contentType: "application/x-www-form-urlencoded; charset=UTF-8",
    crossDomain: true,

    xhrFields: {
        withCredentials: true
    },
});
Run Code Online (Sandbox Code Playgroud)

在Firefox中一切都很好.Chrome未设置Cookie.仅当域字段被删除时,所有浏览器都在运行.我可以看到在下一个请求中(在设置cookie之后)cookie出现在标题中.响应设置cookie后的firefox请求示例(当响应有域字段时):

Cookie: Auth=l_hash=123456&user=xyz&remember_me=false
Run Code Online (Sandbox Code Playgroud)

cookies ajax jquery cors

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

为什么 WHATWG 不允许 HTML 4 和 HTML5 中的嵌套表单?

为什么 WHATWG 不允许 HTML 4 和 HTML5 中的嵌套表单?

编辑:问题最初在如何克服 html 表单嵌套限制?

简而言之,作者说: 您正在制作一个博客应用程序,并且您有一个表单,其中包含一些用于创建新帖子的字段和一个带有“操作”的工具栏,例如“保存”“删除”、“取消”……唯一的问题是按“删除”将提交服务器上的所有表单字段,即使此操作唯一需要的是带有 post-id 的隐藏输入。

因此,这是一个关于表单中多个按钮的优雅解决方案(没有 JavaScript)的问题,用于提交不同的输入字段集(例如多个表单可能允许)并将UI 从用户角度排列为单个实体(“表单”) .

来自该讨论的评论:几乎不可能将元素的屏幕位置与其在文档中的位置完全分开。

编辑:我发现有趣的笔记http://anderwald.info/internet/nesting-form-tags-in-xhtml/ - (X)HTML 不允许嵌套表单,如“表单 > 表单”,但允许“表单 > 字段集 > 表单” ”,W3 验证器说它是有效的,但是浏览器存在这种嵌套的错误。

html webforms

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

正确显示 BusyIndi​​cator

我有一个 WPF C# 应用程序。

我正在使用 Xceeed.wpf 工具包

在伪代码中,我的函数将:

  • 显示忙碌指示器
  • 对我的服务器进行了 REST API 调用
  • BusyIndi​​cator 停止显示

实际上,在 REST API 调用完成之前,BusyIndi​​cator 不会显示。有时它确实会显示,但“品牌”效果并不流畅。

我尝试了几种方法,这是我的最新尝试:

// raise event to invoke method call on main UI page
// event raised here

Task.Run(() =>
{
    // makes API call
    busyIndicator.IsBusy = false;

);

public void ShowBusy()
{
    this.InvokeOnMainThread(() =>
    {
        busyIndicator.IsBusy = true;
    });
}

public static void InvokeOnMainThread(this Control control, Action method)
{
    if (!control.Dispatcher.CheckAccess())
    {            Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, method);
        return;
    }
    method();
}
Run Code Online (Sandbox Code Playgroud)

标记:

    <xctk:BusyIndicator Name="busyIndicator" …
Run Code Online (Sandbox Code Playgroud)

c# wpf xceed

4
推荐指数
1
解决办法
4969
查看次数

Symfony从表单类型的实体创建选择

我在数据库中有很多类别.

这是类别实体

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ORM\Entity
 * @ORM\Table(name="categories")
 */
class Category
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="Category")
     */
    protected $rootCategory;

    /**
     * @ORM\Column(type="text")
     */
    protected $name;

    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set name
     *
     * @param string $name
     *
     * @return Category
     */
    public function setName($name)
    {
        $this->name = $name; …
Run Code Online (Sandbox Code Playgroud)

php symfony doctrine-orm

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

这段代码背后的诀窍是什么?

为什么这会给我一个DATETIME的结果?

Select DATEADD(yy,116, 0)
Run Code Online (Sandbox Code Playgroud)

输出:

2016-01-01 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

还有这个

Select DATEADD(yy,116 +1, -1)
Run Code Online (Sandbox Code Playgroud)

退还给我一年中的最后一天?

这背后的诀窍是什么?我只是玩它,但不知道它是怎么来的?

sql t-sql sql-server sql-server-2008

-4
推荐指数
2
解决办法
174
查看次数