问题标签 [expandoobject]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - TPL 任务 + 动态 == OutOfMemoryException?
我正在开发一个流式 Twitter 客户端 - 经过 1-2 天的持续运行后,我的内存使用量超过了 1.4gigs(32 位进程),并且在达到这个数量后不久,我就会内存不足本质上是这样的代码异常(此代码将在我的机器上的 <30 秒内出错):
我已经对其进行了分析,这绝对是由于 DLR 中的课程下降(从内存中 - 我在这里没有我的详细信息)xxRuntimeBinderxx 和 xxAggregatexx。
这个来自 Eric Lippert (microsoft) 的回答似乎表明我在幕后制作表达式解析对象,即使在我的代码中没有保留对任何内容的引用,也不会得到 GC。
如果是这种情况,上面的代码中是否有某种方法可以防止或减轻它?
我的后备是消除动态使用,但我不想这样做。
谢谢
更新:
2012 年 12 月 14 日:
答案:
让这个特定示例释放其任务的方法是 yield (Thread.Sleep(0)),这将允许 GC 处理释放的任务。我猜在这种特殊情况下不允许处理消息/事件循环。
在我使用的实际代码(TPL 数据流)中,我没有在块上调用 Complete(),因为它们是一个永无止境的数据流——只要 twitter 发送它们,该任务就会接收 Twitter 消息。在这个模型中,从来没有任何理由告诉任何块它们已经完成,因为只要应用程序正在运行,它们就永远不会被完成。
不幸的是,看起来 Dataflow 块从未被设计为长时间运行或处理无数项目,因为它们实际上保留了对发送到其中的所有内容的引用。如果我错了,请告诉我。
因此,解决方法是定期(根据您的内存使用情况——我的是每 10 万条推特消息)释放块并重新设置它们。
在这个方案下,我的内存消耗永远不会超过 80megs,并且在回收块并强制 GC 进行良好测量之后,gen2 堆又回到了 6megs,一切都恢复正常了。
2012 年 10 月 17 日:
- “这并没有做任何有用的事情”:这个例子只是为了让你快速生成问题。它是从与问题无关的几百行代码中总结出来的。
- “创建任务并反过来创建对象的无限循环”:请记住 - 这只是快速演示了问题 - 实际代码正坐在那里等待更多流数据。另外——查看代码——所有对象都是在任务中的 Action<> lambda 中创建的。为什么在超出范围后(最终)不对其进行清理?这个问题也不是因为做得太快——实际的代码需要一天多的时间才能到达内存不足的异常——这只是让它足够快地尝试一下。
- “任务能保证被释放吗?” 对象就是对象,不是吗?我的理解是调度程序只是在池中使用线程,并且它正在执行的 lambda 在它完成运行后无论如何都会被丢弃。
c# - UI 不使用 ExpandoObject 列表更新
我已经按照这个链接实现了动态数据网格。
我正在使用 Converter 绑定来自ExpandoObject
. 这些列显示了学校的总单位等值。
学校可以随时动态添加。现在,如果我添加具有 40 个单位的 School4,我想从默认学校中扣除相同的值(DefaultSchool = 60,School4 = 40)。
我可以在转换器中进行此计算,并且 ItemsSource 也显示更新的值,但它不会反映在 UI 上。
我使用TextBox的LostFocus
事件MyDataGrid.Items.Refresh
,它确实更新了UI,但是每次失去焦点时,UI也会闪烁,就像一个令人耳目一新的网页)。
我只需要更新当前行。当我使用时ExpandoObject
,我不能使用INotifyPropertyChanged
(我相信?),那么在这种情况下最好的方法应该是什么?
那么我应该如何更新 UI 呢?
c# - 使用点表示法或索引访问 DynamicModel.Query
我正在使用带有 .NET 框架 4.0 的 Massive micro-orm 和 SQL Server 2008R2。
和另一堂课……
我想访问像 User.FirstName 或 User["FirstName"] 这样的用户动态对象。这是可能的,还是我错过了什么?
任何输入都受到高度赞赏。
谢谢。
c# - 从 Expando /dynamic 对象中动态删除成员
我正在寻找一种从动态对象中动态删除成员的方法(也许我们可以在这里使用 Expando 对象吗?)。
好的,我想需要澄清一下...
当你这样做时:
, Bar
'jar' 属性将在运行时动态添加。我正在向用户显示这个,他可以进一步添加他自己的属性(表单可用选项),这可以通过将成员添加到动态对象来完成。
但他也可以从 Foo 对象中删除成员(比如“Jar”),我们如何从动态对象中删除成员?我们可以在这里使用 Expando 对象吗?
.net - 绑定到 ExpandoObject。属性更改不起作用
在我的 Windows 应用商店应用程序中,我有一个填充了 ExpandoObjects 的列表。数据绑定适用于初始值,但不适用于我在下载文件后异步设置的图像属性:
连接到 ExpandoObject 上的 PropertyChanged 事件确认它为所有对象触发。新属性附加到对象并且值正确,但是 ListView 中的项目没有完全更新。
该列表包含 14 个对象。如果我使用常规类型的对象而不是 ExpandoObjects 并使用图像属性的相同异步设置,则 14 个对象中的一些会在视图中更新(当前不可见的对象)。如果我在类中实现 INotifyPropertyChanged,则所有 14 个都会更新。使用 ExpandoObjects 我得到了与没有 INPC 的类型对象的确切行为:更新当前不可见的项目。
因此,PropertyChanged 似乎不适用于 ExpandoObject 和数据绑定。
它在 WPF 中按预期工作,但在商店应用程序中没有。查看比较: https ://sites.google.com/site/moramatte/ExpandoComparison.zip?attredirects=0&d=1
c# - 将嵌套属性动态添加到 ExpandoObject
我得到一个 JSON 对象(可能包含多个级别的 JSON 数组等),我想将其转换为 ExpandoObject。
我想出了如何在运行时向 ExpandoObject 添加简单属性,因为它实现了 IDictionary,但是如何在运行时添加嵌套属性(例如,类似的东西myexpando.somelist.anotherlist.someitem
)才能正确解析?
编辑:目前这适用于简单的(第一级)属性:
问题是如何获得要嵌套的名称以及如何相应地解析 ExpandoObject。
python - 如何在 Python 中创建新的未知或动态/扩展对象
在 python 中,我们如何在没有预定义类的情况下创建一个新对象,然后为它动态添加属性?
例子:
最好的方法是什么?
编辑因为很多人在评论中建议我可能不需要这个。
问题是我有一个序列化对象属性的函数。出于这个原因,由于某些构造函数的限制,我不想创建预期类的对象,而是创建一个类似的对象,比如模拟,添加我需要的任何“自定义”属性,然后将其反馈给功能。
c# - 创建具有从数组中读取的属性的 ExpandoObjects 列表
我正在尝试创建对象的动态列表,因为我不知道我的对象将具有哪些属性,直到我从文件中读取它们。
所以假设我在一个数组中有我的对象的属性(例如FirstName、LastName、Email)。
我想使用上述属性创建名为 Recipient 的动态对象。然后我想创建一个列表并将其中一些对象添加到该列表中。
到目前为止,我已经完成了以下操作,但我不确定这是否是将属性分配给动态对象的正确方法(“字段”是数组的名称):
如何创建具有上述属性的收件人对象,然后将这些收件人添加到人员列表中?
c# - In C#, how do I remove a property from an ExpandoObject?
Say I have this object:
How would I remove foo.bang
for example?
I don't want to simply set the property's value to null--for my purposes I need to remove it altogether. Also, I realize that I could create a whole new ExpandoObject by drawing kv pairs from the first, but that would be pretty inefficient.
c# - 为什么我必须手动创建 ExpandoObject 才能正确使用 dynamic 关键字?
我在看问题Use 'dynamic' throw a RuntimeBinderException。我面临类似的问题:
基本上,我想在 ASP.NET MVC 中创建一个使用动态参数的“HTML 助手”,类似于许多现有助手的 htmlArguments 参数(下面有更多代码):
看法:
然而,在天真的方法中,我被RuntimeBinderException
抛出,声明'object' does not contain a definition for 'Position'
,即使在调试和悬停在 _args 变量上时,它显然确实有一个 Position 属性。
调用者和被调用者位于不同的程序集中。为什么会出现这个问题?
(解决方案已在同一个问题中显示:手动创建一个 ExpandoObject来保存参数。)
执行:
[编辑以更清楚地说明我的问题是在“显然”设置了 Position 属性时出现的。我知道如果一开始就没有定义该属性,则必须引发异常。]