标签: circular-reference

Microsoft如何创建具有循环引用的程序集?

在.NET BCL中有以下循环引用:

  • System.dllSystem.Xml.dll
  • System.dllSystem.Configuration.dll
  • System.Xml.dllSystem.Configuration.dll

这是.NET Reflector的截图,显示了我的意思:

在此输入图像描述

微软如何创建这些程序集对我来说是一个谜.是否需要特殊的编译过程才允许这样做?我想象这里有一些有趣的东西.

.net assemblies circular-reference base-class-library

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

如何避免Spring MVC测试的"循环视图路径"异常

我的一个控制器中有以下代码:

@Controller
@RequestMapping("/preference")
public class PreferenceController {

    @RequestMapping(method = RequestMethod.GET, produces = "text/html")
    public String preference() {
        return "preference";
    }
}
Run Code Online (Sandbox Code Playgroud)

我只是尝试使用Spring MVC测试来测试它,如下所示:

@ContextConfiguration
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class PreferenceControllerTest {

    @Autowired
    private WebApplicationContext ctx;

    private MockMvc mockMvc;
    @Before
    public void setup() {
        mockMvc = webAppContextSetup(ctx).build();
    }

    @Test
    public void circularViewPathIssue() throws Exception {
        mockMvc.perform(get("/preference"))
               .andDo(print());
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下异常:

循环视图路径[preference]:将再次调度回当前处理程序URL [/ preference].检查您的ViewResolver设置!(提示:由于默认的视图名称生成,这可能是未指定视图的结果.)

我发现奇怪的是,当我加载包含模板和视图解析器的"完整"上下文配置时,它工作正常,如下所示:

<bean class="org.thymeleaf.templateresolver.ServletContextTemplateResolver" id="webTemplateResolver">
    <property name="prefix" value="WEB-INF/web-templates/" />
    <property name="suffix" value=".html" …
Run Code Online (Sandbox Code Playgroud)

spring spring-mvc circular-reference thymeleaf spring-mvc-test

96
推荐指数
10
解决办法
16万
查看次数

垃圾收集器和循环引用

考虑这两个类:

public class A
{
     B b;
     public A(B b) { this.b = b; }
}

public class B
{
     A a;
     public B() { this.a =  new A(this); }
}
Run Code Online (Sandbox Code Playgroud)

如果我有类似上面设计的类,那么垃圾收集器(GC)会收集这些类的对象吗?

假设我这样做:

void f()
{
     B b = new B();
}
Run Code Online (Sandbox Code Playgroud)

在这个方法中,我创建了一个B被调用的实例b,当方法返回时,b超出范围,GC应该能够收集它,但是如果它要收集它,它必须先收集a它是成员的B,并收集a,它需要收集b第一是的构件A.它变成了圆形.所以我的问题是:这样的循环引用会阻止GC收集对象吗?

  • 如果是,那我们怎样才能避免这个问题呢?我们怎样才能确保在课堂设计中没有循环参考?是否有任何工具(或编译器选项)可以帮助我们检测循环引用?
  • 如果没有,我们在哪里和为什么使用WeakReference课程?它的目的是什么?

c# garbage-collection circular-reference

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

如何以及何时在Python中正确使用weakref

我有一些代码,其中类的实例具有父< - >子引用,例如:

class Node(object):
  def __init__(self):
    self.parent = None
    self.children = {}
  def AddChild(self, name, child):
    child.parent = self
    self.children[name] = child

def Run():
  root, c1, c2 = Node(), Node(), Node()
  root.AddChild("first", c1)
  root.AddChild("second", c2)
Run()
Run Code Online (Sandbox Code Playgroud)

认为这会创建循环引用root,c1并且c2在Run()完成后不会被释放,对吗?那么,如何让它们被释放?我想我可以做点什么root.children.clear(),或者self.parent = None- 但如果我不知道该怎么做呢?

这是使用weakref模块的合适时间吗?什么,我究竟是什么弱反应?该parent属性?该children属性?整个对象?上述所有的?我看到有关WeakKeyDictionary和weakref.proxy的讨论,但我不清楚它们应该如何使用,如果有的话,在这种情况下.

这也是在python2.4上(无法升级).

更新:示例和摘要

weakref-ify的哪些对象取决于哪个对象可以在没有另一个对象的情况下生存,以及哪些对象相互依赖.生命时间最长的对象应包含较短寿命对象的弱化参数.同样,不应该将weakrefs设置为依赖项 - 如果它们是依赖项,依赖项可能会默默地消失,即使它仍然需要.

例如,如果你有一个树结构,root有子节点kids,但可以没有root节点,那么该对象应该使用weakrefs kids.如果子对象依赖于父对象的存在,情况也是如此.下面,子对象需要父对象来计算其深度,因此强对齐parent.kids但是,属性的成员是可选的,因此使用weakrefs来阻止循环引用. …

python circular-reference

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

如果有循环引用,如何将DOM节点序列化为JSON?

我想将DOM节点甚至整个序列化为windowJSON.

例如:

 >> serialize(document)
    -> {
      "URL": "http://stackoverflow.com/posts/2303713",
      "body": {
        "aLink": "",
        "attributes": [
          "getNamedItem": "function getNamedItem() { [native code] }",
          ...
        ],
        ...
        "ownerDocument": "#" // recursive link here
      },
      ...
    }
Run Code Online (Sandbox Code Playgroud)

JSON.stringify()

JSON.stringify(window) // TypeError: Converting circular structure to JSON
Run Code Online (Sandbox Code Playgroud)

问题是JSON默认不支持循环引用.

var obj = {}
obj.me = obj
JSON.stringify(obj) // TypeError: Converting circular structure to JSON
Run Code Online (Sandbox Code Playgroud)

window和DOM节点有很多.window === window.window将如此document.body.ownerDocument === document.

此外,JSON.stringify不序列化函数,所以这不是我想要的.

dojox.json.ref

 `dojox.json.ref.toJson()` can easily serialize object with …
Run Code Online (Sandbox Code Playgroud)

javascript serialization json dom circular-reference

48
推荐指数
3
解决办法
6万
查看次数

Javascript /垃圾收集器中的循环引用

有人可以详细解释Javascript引擎如何处理循环引用?浏览器甚至node.js之间有很大的区别吗?

我所说的是对象内部的显式反向/下一个引用.例如:

var objA = {
    prop: "foo",
    next: null
};

var objB = {
    prop: "foo",
    prev: null
};

objA.next = objB;
objB.prev = objA;
Run Code Online (Sandbox Code Playgroud)

我们走了.如果我们这样做,console.log( objA )我们可以看到我们创造了一个无限链.最大的问题是,这是不是很糟糕?未明确清除时是否会造成内存泄漏?

所以我们必须这样做

objA.next = null;
objB.prev = null;
Run Code Online (Sandbox Code Playgroud)

或者垃圾收集者会照顾我们这样的星座吗?

javascript garbage-collection memory-leaks circular-reference

40
推荐指数
1
解决办法
1万
查看次数

Json和循环引用异常

我有一个对象,它具有对另一个对象的循环引用.鉴于这些对象之间的关系,这是正确的设计.

为了显示

Machine => Customer => Machine
Run Code Online (Sandbox Code Playgroud)

正如我所料,当我尝试使用Json来序列化机器或客户对象时,我遇到了一个问题.我不确定的是如何解决这个问题,因为我不想打破Machine和Customer对象之间的关系.解决此问题的选项有哪些?

编辑

目前我正在使用Controller基类提供的Json方法.所以我正在做的序列化基本如下:

Json(machineForm);
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc serialization json circular-reference

39
推荐指数
3
解决办法
4万
查看次数

将print_r和var_dump与循环引用一起使用

我正在使用MVC框架Symfony,似乎我想调试的很多内置对象都有循环引用.这使得无法使用print_r()或打印变量var_dump()(因为它们无限制地遵循循环引用或直到进程耗尽内存,以先到者为准).

而不是print_r用一些智能编写我自己的克隆,那里有更好的替代品吗?我只希望能够将变量(对象,数组或标量)打印到日志文件,http标头或网页本身.

编辑:要澄清问题所在,请尝试以下代码:

<?php

class A
{
    public $b;
    public $c;

    public function __construct()
    {
        $this->b = new B();
        $this->c = new C();
    }
}

class B
{
    public $a;

    public function __construct()
    {
        $this->a = new A();
    }
}

class C
{
}

ini_set('memory_limit', '128M');
set_time_limit(5);

print_r(new A());
#var_dump(new A());
#var_export(new A());
Run Code Online (Sandbox Code Playgroud)

它无法使用print_r(),var_dump()var_export().错误消息是:

PHP致命错误:第10行的print_r_test.php中允许的内存大小为134217728字节(尝试分配523800字节)

php debugging circular-reference

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

将循环结构转换为JSON - 有什么方法可以找到它抱怨的字段吗?

我正在尝试在Chrome中对一个对象进行字符串化(...),并且我不断获得"将循环结构转换为JSON"消息,尽管事实上(据我所知)没有这样的结构存在.

我已经完成了十几次代码,无法找到任何循环引用.有没有什么方法可以让Chrome告诉我除了这个痛苦无用的错误信息之外还有什么蠢货?

json google-chrome circular-reference

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

如何在TypeScript中创建循环引用类型?

我有以下代码:

type Document = number | string | Array<Document>;
Run Code Online (Sandbox Code Playgroud)

TypeScript抱怨以下错误:

test.ts(7,6): error TS2456: Type alias 'Document' circularly references itself.
Run Code Online (Sandbox Code Playgroud)

显然不允许循环引用.但是,我仍然需要这种结构.这将是一个解决方法?

types circular-reference typescript

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