标签: circular-reference

DOM:为什么这是内存泄漏?

请考虑Mozilla Docs关于JavaScript内存泄漏的这句话:

function addHandler() {
    var el = document.getElementById('el');
    el.onclick = function() {
        this.style.backgroundColor = 'red';
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码将元素设置为在单击时变为红色.它还会造成内存泄漏.为什么?因为对el的引用无意中被捕获到为匿名内部函数创建的闭包中.这将在JavaScript对象(函数)和本机对象(el)之间创建循环引用.

请以简单明了的方式解释上述泄漏的原因,我没有得到确切的观点.

由于泄漏,网站/页面是否面临安全问题?我该如何避免它们?其他什么代码会导致内存泄漏?如何判断内存泄漏的时间?

我是内存泄漏主题的绝对新手.有人可以一步一步地为我澄清这些东西吗?还有人可以帮我澄清这句话"这会在JavaScript对象(函数)和本机对象(el)之间创建一个循环引用."

javascript internet-explorer garbage-collection memory-leaks circular-reference

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

如何处理循环引用?

如果我有这两个项目:

MyCompany.ERP.Billing
MyCompany.ERP.Financial
Run Code Online (Sandbox Code Playgroud)

结算Financial发送/发送信息,反之亦然.两者都太大了所以我不想把它们放在一个项目中.Visual Studio不允许循环引用.你会怎么处理?

.net architecture circular-reference visual-studio

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

Spring循环参考示例

我在使用spring工作的一个项目中有一个循环引用,我无法修复,并在启动时失败并出现以下错误:

'org.springframework.security.authenticationManager': Requested bean is currently in creation: Is there an unresolvable circular reference?
Run Code Online (Sandbox Code Playgroud)

我尝试在示例项目中以较小的级别重新创建相同的问题(没有我的工作项目的所有细节).然而,我无法想出弹簧因错误而失败的合理情况.这就是我所拥有的:

public class ClassA {
    @Autowired
    ClassB classB;
}

public class ClassB {
    @Autowired
    ClassC classC;
}

@Component
public class ClassC {
    @Autowired
    ClassA classA;
}

@Configuration
public class Config {
    @Bean
    public ClassA classA() {
        return new ClassA();
    }

    @Bean
    public ClassB classB() {
        return new ClassB();
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的项目中我有类似的情况,但是失败了,我也期待春天在我的示例项目中抱怨.但它工作正常!有人能给我一个如何用循环引用错误打破弹簧的简单例子吗?

编辑:我使用javax.inject.Provider修复了问题.两个项目中唯一的另一个区别是使用的注释是javax.inject.Inject和javax.annotation.ManagedBean代替@Autowired和@Component.

java spring dependency-injection circular-reference autowired

26
推荐指数
3
解决办法
5万
查看次数

javascript,循环引用和内存泄漏

从我记得的一个不太遥远的过去,Javascript解释器在面对循环引用时遭遇了内存泄漏问题.

在最新的浏览器中仍然如此吗?(例如Chrome,FF 3.5等)

javascript browser memory-leaks circular-reference

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

是否可以在Clojure中创建循环引用?

忽略本机互操作和瞬态,是否可以在Clojure中创建包含直接循环引用的任何数据结构?

似乎不可变数据结构只能包含对其自身先前版本的引用.是否有任何Clojure API可以创建一个引用自身的新数据结构?

Scheme具有letrec形式,允许创建相互递归的结构 - 但据我所知,Clojure没有任何类似的东西.

这个问题与将Clojure移植到iOS有关 - 它没有垃圾收集,但确实有引用计数.

clojure circular-reference

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

在MongoEngine中实现双向关系

我正在构建一个使用MongoDB和MongoEngine来存储数据的Django应用程序.为了呈现我的问题的简化版本,我想要有两个类:User和Page.每个页面应该与用户和每个用户关联页面.

from mongoengine import *

class Page(Document):
    pass

class User(Document):
    name = StringField()
    page = ReferenceField(Page)

class Page(Document):
    content = StringField()
    user = ReferenceField(User)
Run Code Online (Sandbox Code Playgroud)

(请注意,必须在User之前定义Page.如果我缺少处理循环依赖关系的Pythonic方法,请告诉我.)每个文档都可以创建并保存得很好,但是为用户分配页面会引发错误.

u = User(name='Jeff')
u.save()
p = Page(content="I'm a page!")
p.save()
p.user = u
p.save()
u.page = p
u.save()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "build\bdist.win32\egg\mongoengine\document.py", line 71, in save
  File "build\bdist.win32\egg\mongoengine\base.py", line 303, in validate
mongoengine.base.ValidationError: Invalid value for field of type "ReferenceField"
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么抛出这个异常,我做错了什么,以及如何避免它?

python circular-reference mongodb bidirectional-relation mongoengine

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

对象之间的循环引用是不好的做法?

我有一个模型,它将"携带"(Model.validator)一个验证器实例,我需要Validator来访问Model的属性.所以,我想出的是以下内容

var Validator = function(model) {
    this.model = model;
};

var Model = function() {
    this._attributes = {};
    this.validator = new Validator(this);
};

var model = new Model();
Run Code Online (Sandbox Code Playgroud)

此代码在这两个对象之间创建循环引用.这是一个会导致内存泄漏的不良做法吗?关于如何实现它的任何其他想法?

PS我在Angular.js范围内的对象之间看到了这样的循环引用.

javascript circular-reference

22
推荐指数
1
解决办法
3143
查看次数

我用什么生命周期创建相互引用的Rust结构?

我想让结构成员知道他们的父母.这大约是我正在尝试做的事情:

struct Parent<'me> {
    children: Vec<Child<'me>>,
}

struct Child<'me> {
    parent: &'me Parent<'me>,
    i: i32,
}

fn main() {
    let mut p = Parent { children: vec![] };
    let c1 = Child { parent: &p, i: 1 };
    p.children.push(c1);
}
Run Code Online (Sandbox Code Playgroud)

我试图用生命周期来安抚编译器而不完全理解我在做什么.

这是我坚持的错误信息:

error[E0502]: cannot borrow `p.children` as mutable because `p` is also borrowed as immutable
  --> src/main.rs:13:5
   |
12 |     let c1 = Child { parent: &p, i: 1 };
   |                               - immutable borrow occurs here
13 |     p.children.push(c1);
   | …
Run Code Online (Sandbox Code Playgroud)

struct reference circular-reference rust

21
推荐指数
1
解决办法
5309
查看次数

我有一个循环参考.如何在Objective-C中创建弱引用?

我正在开发一个iPhone应用程序.我有一个类的对象Row需要释放该类的许多对象Block.每个Block当前都有一个保留类的实例变量的属性Row.

@interface Block : UIImageView {
  Row *yCoord;
}
@property (nonatomic,retain) Row *yCoord;
@end
Run Code Online (Sandbox Code Playgroud)

每个Row包含NSMutableArray这些块中的一个.

@interface Row : NSObject {
    NSMutableArray *blocks;
}
-(void)addBlock:(Block*)aBlock;
@end

@implementation Row
-(void)addBlock:(Block*)aBlock {
    [blocks addObject:aBlock];
    aBlock.yCoord = self;
}
@end
Run Code Online (Sandbox Code Playgroud)

我知道这是一个循环参考.Apple的文档声明,为了使用循环引用释放对象,我需要一个弱引用而不是一个强引用(一个保留属性),但它没有贯彻并解释我究竟是如何做到的.我计划同时释放和释放一行中的所有块以及行本身.如何在每个块中将弱引用设置为"父"行?

iphone weak-references objective-c circular-reference

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

如何在处理Json时修复循环引用错误

这个问题是我在这里的原始帖子的一部分获取数据到Extjs GridPanel

下面是我的控制器从sql db读取数据然后我试图将结果编码为JSON并将数据发送回我的gridview.js

public JsonResult writeRecord()
//public string writeRecord()
    {

        Response.Write("Survey Completed!");
        SqlConnection conn = DBTools.GetDBConnection("ApplicationServices2");


        string sqlquery = "SELECT Q1, Q2, Q3, Q4, Improvements, Comments FROM myTable";
        SqlDataAdapter cmd = new SqlDataAdapter(sqlquery, conn);


        DataSet myData = new DataSet();
        cmd.Fill(myData, "myTable");

        conn.Open();
        conn.Close();

        return Json(myData, JsonRequestBehavior.AllowGet);
        //return myData.GetXml();

    } 
Run Code Online (Sandbox Code Playgroud)

这就是问题所在,通过上面的代码,我在执行gridview.js时得到的gridview表没有数据,但如果我直接访问我的控制器的方法就像这样

http://localhost:55099/GridView/writeRecord
Run Code Online (Sandbox Code Playgroud)

我收到这个错误,

序列化"System.Globalization.CultureInfo"类型的对象时检测到循环引用. 描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息. 异常详细信息: System.InvalidOperationException:序列化"System.Globalization.CultureInfo"类型的对象时检测到循环引用.

有人可以请帮忙..

c# json extjs circular-reference asp.net-mvc-3

20
推荐指数
2
解决办法
3万
查看次数