【问题标题】:Web service (.net) returning html - limitations?返回 html 的 Web 服务 (.net) - 限制?
【发布时间】:2011-06-03 03:28:19
【问题描述】:

我有一个 Web 服务,它以字符串形式返回表格(出于优化目的)的 HTML。我要谨慎的一件事是允许我在 C# 中放入字符串变量的数据限制,以及任何其他可能的限制或警告?

我在在线论坛上读到,字符串非常适合,您可以在其中插入多达 1GB 的数据(这对于我的目的来说肯定足够了)。有什么意见吗?

【问题讨论】:

  • 您是否有任何理由将整个事物构建为单个字符串,而不是在生成它们时将其流式传输(例如行)?
  • 如果您要返回那么多 HTML,您绝对应该考虑将原始数据作为 JSON 返回,然后使用 jQuery 模板、jTemplates 等客户端模板引擎构建表。跨度>
  • @Dave Ward,好电话。您是否为 C# 推荐了特定的引擎?
  • 这更多地取决于您在客户端使用的框架,而不是您在服务器端使用的框架。如果您在客户端使用 jQuery,则 jQuery 模板非常有用(当然,jQuery 非常适用于 ASP.NET/C#)。
  • Dave 我正在返回 600 行数据,我尝试通过在字符串中构建表 html 然后将字符串提供给 div 在客户端上构建表。这很快。缓慢的部分是循环原始 JSON 数据,600 行......它需要 15 秒。有没有插件可以让我优化循环部分?

标签: c# html ajax web-services string


【解决方案1】:

Microsoft CLR 中的字符串(或任何其他对象)的大小最大为 2GB。 (这只是一个实现细节,不是指定标准。其他实现可能有不同的限制。)

由于字符串是 UTF-16,每个字符需要两个字节,这意味着一个字符串最多可以包含 1 个千兆字符

【讨论】:

  • 这不是内存碎片的问题吗?
  • 为什么碎片会成为一个问题?数据可以/并且被分配给非连续的内存块。碎片化可能会降低整体性能方面,但它会如何降低内存的可用性?
  • @Anonymous Type:我很确定字符串在内存中被布置为连续的“字符串”字符(不确定这是 CLI 规范的要求还是只是实现细节)。如果您没有 2GB 的连续内存可用,那么您将无法分配 2GB 的字符串。
  • @jball:是的,这可能是个问题(假设需要将字符串分配为单个连续块,我认为就是这种情况)。说的很明显,但是只有当/当没有其他东西限制你的对象的大小时,才会达到 2GB 的最大对象大小限制。
【解决方案2】:
【解决方案3】:

根据您通过 http 发送的有效负载的大小(假设您的远程服务正在使用此绑定),您可能希望考虑在通过网络发送之前将整个字符串分成更小的有效负载,然后重新组装它在客户端上。

如果您应该调查,您应该注意的一件事是 Web 服务使用的超时值,以及它是否适合返回数据所用的时间。

正如其他答案所说,理论上 1gb 用于字符串限制,但实际上这是用户模式内存限制。因此,如果您的应用程序可以访问 2Gb 的用户模式地址空间,那么您可以继续使用它,直到它用完为止。请注意,这不是物理 RAM,而是可用的“每个应用程序”用户模式内存总量。

【讨论】:

    猜你喜欢
    • 2014-10-03
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多