小编The*_*tor的帖子

在.NET中,您可以设置对象的GC生成,还是以其他方式表明该对象将超出范围?

.NET的垃圾收集器是一种世代的垃圾收集器,其依据是大多数已分配对象都是短暂的。这样,对象从“第0代”开始,可以很容易地收集它们(并且经常如此),而寿命更长的对象则被提升为“第1代”和“第2代”,在此它们会被更全面的扫描所触及。当方法将一个对象分配为其状态的一部分时,通常会创建第0代对象,然后在该对象退出时让该对象超出范围。

但是,有时那些将对象分配为状态的方法会运行很长时间。也许他们阻塞了I / O调用,或者托管了带有一堆线程的合并排序或数据库查询。在此期间发生的垃圾回收将在方法执行期间将这些状态对象提升为第1代和第2代。尽管这样做可以防止它们进入快速垃圾回收扫描,但一旦该长时间运行的方法结束,我将不再需要这些状态对象,也不再有被调用者持有对它们的任何引用。

现在,能够将其告知垃圾收集器将是很好的。可以说,这个对象已经存在很长时间了,但是可以很快将其丢弃,并且垃圾回收器可以通过将对象移到gen 0堆中进行响应。然后,下次需要执行垃圾回收时(例如下次调用此长时间运行的方法),可以使用更快的gen 0扫描而不是完整的阻塞扫描来回收必需的内存,从而减少了垃圾收集器性能影响的不可预测性。

其他一些信息:

  • 现在,我的团队通过将这些“本地状态”对象存储在通过,refin参数传递的巨大的可变结构中,减轻了这种不可预测的性能问题。据我了解,.NET框架对可变结构之外的一些结构(字节数很少(官方消息说16,尽管我听说过24))以及可变结构的优化均很差,但我无法与以下事实进行争论:这些结构具有自动作用域,并且在方法返回时一定会释放它们-除非,当然,除非我们可以向GC发出信号,表明某个类即将退出。
  • 如果这是一个建议API,而不是命令,我将非常高兴,因为最终GC必须做它必须做的事情。也许,如果事实证明该对象仍然在某处具有引用,则最终将导致某种性能损失。
  • 对于.NET以外的垃圾收集框架中存在的此功能,我也乐于回答。

.net garbage-collection

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

使用Node.js作为Shell

我如何将node.js设置为bash的shell替换?例如,我应该能够运行vi('file')以打开文件并cd('location')在目录之间进行更改.

这甚至可能吗?

shell node.js

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

如何在C#中诊断和删除模糊引用?

(请随意为此问题建议更准确的标题.)

在我的Visual Studio 2015解决方案中,我有三个项目(让我们称之为Alpha,Beta和Gamma)或多或少相同,但不同之处在于它们定义了不同的后端.这两个项目都将一个类热插入同一个命名空间:

Α:

namespace SharedNamespace {
    public class SharedClass {
        // implement SharedClass using Alpha's backend
    }
}
Run Code Online (Sandbox Code Playgroud)

Beta版:

namespace SharedNamespace {
    public class SharedClass {
        // implement SharedClass using Beta's backend
    }
}
Run Code Online (Sandbox Code Playgroud)

伽玛:

namespace SharedNamespace {
    public class SharedClass {
        // implement SharedClass using Gamma's backend
    }
}
Run Code Online (Sandbox Code Playgroud)

有几个项目使用这个热插拔类,每个类都引用Alpha,Beta或Gamma.其中一个(让我们称之为Omricon)用于引用Alpha,但现在引用Gamma:

// ...
SharedNamespace.SharedClass sharedClass;
sharedClass.DoThing();
// ...
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试构建Omricon时,C#编译器会给出错误CS0433:

The type 'SharedClass' exists in both 'Alpha, Version=0.0.0.0 (etc)' 
and 'Gamma, Version=0.0.0.0 (etc)'
Run Code Online (Sandbox Code Playgroud)

但是,Omricon 在构建时引用Gamma - …

c# visual-studio-2015

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

动态命名的局部变量,用于加载模块

有没有办法var x = 1用动态名称设置局部变量(即),就像我们可以用于对象属性(即o["prefix:" + x])?

例如,我有一个CommonJS模块,并将多个组件加载到单独的局部变量中,以方便访问:

var module = require("module") // returns object like {a, b, c}
var a = module.a;
var b = module.b;
var c = module.c;
Run Code Online (Sandbox Code Playgroud)

我希望能够在一行中完成此操作 - 为每个模块的属性设置局部变量.

一种方法是这样的:

Object.assign(local_variable_object, require("module"));
Run Code Online (Sandbox Code Playgroud)

where local_variable_object是一个以key作为变量名的对象.如果我只想导入部分模块,我可以对结果应用过滤功能require().

我意识到我可能会使用eval,但这会不必要地杀死V8优化编译器,因为它应该在优化时知道这些变量是什么以及它们是否有效.

javascript

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

WebAssembly是否仍在开发中?

自发布1.0版以来,详细介绍WebAssembly的主站点https://webassembly.org/似乎尚未更新,甚至功能路线图也是如此。MDN上文档似乎并没有好得多,而且设计库也没有更新。我看到规范和参考实现正在更新,尽管至少有一年没有新版本发布。

由此看来,可以得出合理的结论,即WebAssembly不再得到积极开发,它的MVP只是为了维护使用它的网站而得以维持-所有这些很酷的MVP后功能都发布在路线图上(例如线程) ,多个存储库,垃圾回收,其中包含功能以外的东西的表)永远不会消失,或更糟糕的是,WebAssembly最终将被弃用,而采用asm.js或新标准。这是正确的结论吗?还是正在跟踪或计划在我找不到的地方进行主动WebAssembly开发?

webassembly

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