【发布时间】:2015-02-14 06:17:18
【问题描述】:
我正在实现一个库,该库使用 Newtonsoft 的 LINQ to JSON 函数将 JSON 数据解析为各种 C# 对象。除了惰性与急切的方法之外,传递一些其他库的 IEnumerable 与将其转储到 List 然后返回是否有任何影响?这是否允许更好的垃圾收集或类似的东西?
public class SimpleClass
{
public IEnumerable<string> Tags { get; private set; }
// Assume the token passed is a valid array of strings.
public void UpdateTags1(JToken token)
{
this.Tags = token["tags"].Values<string>();
}
public void UpdateTags2(JToken token)
{
this.Tags = new List<string>(token["tags"].Values<string>());
}
}
【问题讨论】:
-
我不这么认为。此时所有程序集都加载到内存中,您的库 dll 和 json.net 库 dll 之间基本上没有区别。特别是如果您在同一个应用程序域中工作并且不执行封送处理。
-
顺便说一句,访问由 UpdateTags1() 分配的 Tag 可能会导致多个 IEnumerable 枚举到 JToken.Values()。所以我会改用
ICollection<string>并使用ToArray()强制实现。 -
是的,我知道这个问题。不过,这是一个低级库。假设任何使用它的开发人员都会自己将 IEnumerable 转换为 List 或他们想要的任何其他内容。 (至少理论上是这样……开发人员在现实中做什么是另一回事。)
标签: c# ienumerable linq-to-json