问题标签 [sgen]

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.

0 投票
1 回答
296 浏览

c# - How to get advantage from sgen.exe

I successfully used sgen.exe to create my MyLibrary.XmlSerializer.dll assembly, because I want to avoid the waste of time for the "first" deserialization.

But now, how to use it?

I mean, where do I have to put MyLibrary.XmlSerializer.dll to be used? How to be sure?

Thanks!

0 投票
1 回答
42 浏览

list - 使用 SGEN 后如何序列化列表

使用 SGEN 生成的程序集时如何序列化列表?

生成程序集后,我可以访问以下类:PersonSerilizer 并且可以序列化一个对象,但是如何序列化这些对象的列表?

任何帮助将不胜感激。

0 投票
1 回答
2944 浏览

visual-studio-2012 - “sgen.exe”以代码 -532462766 退出

再会,

我正在尝试以发布模式构建我的项目,但不断收到标题中所述的错误。是什么原因造成的,我该如何预防或解决它?

我在 stackoverflow 上看到的其他答案,比如这个,对我来说毫无意义。

sgen失败

0 投票
1 回答
460 浏览

c# - SGEN.exe - 未找到 Microsoft.Xml 命名空间

我生成的序列化 .dll 有一个奇怪的问题。.dll 已成功生成,我可以在我的项目中引用它,所有类型都按预期包含在命名空间Microsoft.Xml.Serialization.GeneratedAssembly中,甚至智能感知也在获取类型和命名空间。但是,当我去构建引用生成程序集中的任何类型的项目时,我会遇到以下错误:

错误 2命名空间“Microsoft”中不存在类型或命名空间名称“Xml”(您是否缺少程序集引用?)

很奇怪,不是吗?就智能感知而言,命名空间显然存在,我以前从未遇到过这样的问题。我试图重新生成程序集,仍然是同样的问题。

现在我已经sgen.exe使用标志运行/keep并将生成的源代码复制到我的项目中,这很好。我只是好奇是否有办法解决这个问题,或者其他人是否曾经遇到过它。

编辑:

事实证明,问题是因为生成的程序集的目标是 .NET 框架的版本大于引用它的程序集。现在问题变成了 - 如何使用 Sgen 生成针对特定 .NET 框架版本的序列化程序集。

0 投票
1 回答
2791 浏览

linux - 这是 Linux Mono 应用程序中的内存泄漏吗?

我一直在努力确定我看到的是否是我的 Debian Wheezy Mono-Sgen 2.10.8.1-8 嵌入式应用程序中的内存泄漏。该系统有 512MB 的 RAM。交换被禁用。我一直在研究试图了解 Linux 如何管理进程内存,以确定我所看到的是否实际上是 Mono-Sgen 中某处的内存泄漏。我很确定这不是我的应用程序,因为经过数周的恒定运行时间后,我已经对其进行了多次分析,并且 GC 内存总是回落到应用程序的基线。从我的应用程序的角度来看,没有任何对象泄漏。这并不意味着 Mono-Sgen 内部没有泄漏,但我还没有确定这一点,也可能不是。

我试图限制我的 Mono-Sgen 堆,因为大型堆的 mono 的默认值是 512MB,因为这是我的系统所拥有的全部,我认为我需要限制它以防止 Linux 出现 OOM。我对 Mono-Sgen 的配置如下:

export MONO_GC_PARAMS=major=marksweep-fixed,major-heap-size=32m,nursery-size=4m,疏散阈值=75

据我了解,我正在使用 32MB 固定大小的标记和清除固定主堆,默认托儿所大小为 4MB,如果任何主堆分配桶低于 75,Mono-Sgen 将在主堆上执行复制收集% 用于防止碎片。我提高了 66% 的默认值。

自从停电导致重置后,我的设备目前已经运行了 6 天多一点。当我的应用程序第一次启动时,我等待大约 10 分钟以确保它已完全初始化,然后我拍摄 /proc/PID/status 文件的快照以获取其内存使用情况的基线。今天,我又开了一家快照商店,看看我在哪里,并且一如既往,我的虚拟、驻留和 Mono-Sgen 流程实例的数据再次增长。它尚未突破初始化期间出现的高水位线,但我上次进行此测试时确实如此。我没能做的和我想要完成的是让它运行到耗尽系统所有物理内存的地步。我需要知道这是否实际上是内存泄漏,或者 Linux 是否会在某个时候回收我的进程分配的一些页面。

我注意到的一件事是,即使知道我没有交换,我的 Mono-Sgen 进程的常驻大小总是比数据数少 30MB。据我了解,数据计数是堆分配量,常驻大小是物理内存中的实际大小,虚拟是已分配的,不一定使用。

我的假设是,Linux 只是 Linux,除非必须,否则不会浪费时间或内存。我假设由于系统负载非常轻,Linux 的内存压力为 0,可以做任何事情来回收内存,以免 Mono-Sgen 继续分配和增长堆,我希望当有一些实际的内存压力时,Linux 会继续介入并回收未真正使用的页面。

我已经读过,当在先前分配的内存上调用 free 时,Linux 不会缩小进程的分配内存大小。我不明白为什么,除非 Linux 是 Linux,否则它只会在必要时这样做。但我担心的是我需要等多久才能发生这种情况。

这是内存泄漏,还是当内存压力开始出现时,Linux 会回收该进程的驻留和数据大小之间的页面差异?我已经搜索并阅读了有关该主题的所有内容,但我没有找到我正在寻找的答案,并且真的不想等待一个月来确定我的申请是否会因为 OOM 杀手而被退回。无论如何我都会:)但我想事先知道。

我已经研究了 Mono-Sgen 2.10.8.1-8 的潜在内存泄漏,但是对于我正在做的事情(使用大量 process.start() 调用本机 Linux 应用程序)大多数类型的错误会伤害我不在此版本中。我尝试更新到 Jessie 的 Mono-Sgen 版本(我认为是 3.2.8),但它在我的系统上崩溃了,所以出于更多未知的恐惧,我恢复到了稳定的 Mono-Sgen 2.10.8.1-8 版本。

附件是典型内存信息的大量快照,我的大部分注意力都集中在 /proc/PID/status 返回的内容上。

任何信息都将一如既往地受到赞赏,我希望我只是不明白 Linux 如何在轻负载系统上回收内存。

正常运行 6 天后运行 Mono-Sgen 进程的 /proc/PID/status 差异

免费 -tmh 具有 512MB RAM 的 Linux 嵌入式系统,无交换

具有 512MB RAM,无交换的 Linux 嵌入式系统的顶级命令结果

0 投票
0 回答
103 浏览

asp.net - 为什么出站 URL 重写规则需要 XmlSerializers.dll

我正在尝试在 web.config 的重写部分中启用 OutboundRules 以将所有 .html 扩展名转换为无扩展名。

但是,当我添加任何规则时(无论它包含什么),我都会收到一个 500 错误,指出无法找到 .XmlSerializers.dll(请注意,出错的是数据项目,而不是 Web 项目)。一旦我删除 outboundRules 部分,该站点就会重新开始工作。

我已经尝试使用 sgen 在本地实际生成 XmlSerializer,但它失败并出现以下错误:

所以我的假设是 OutboundRules 总是需要 XmlSerializer,但是,它总是动态生成的。在这种情况下,它无法以静默方式即时生成,因此我们会收到该错误。

那么,首先如何使 Serializer 工作?第二,为什么需要它?

0 投票
1 回答
301 浏览

visual-studio-2013 - 项目不会在自定义配置下构建 - SGEN 错误

视觉工作室 2013。

我有一个在发布和调试配置下构建的解决方案(所有项目配置都适当地设置为发布和调试)。我添加了一个名为“Staging”的自定义配置,并且仅将 Web 应用启动项目设置为该配置(所有其他依赖项仍设置为 Debug)。

当我尝试构建网络应用程序时,我得到...

SGEN:错误:无法加载一种或多种请求的类型。检索 LoaderExceptions 属性以获取更多信息。

如果我将 Web 应用程序项目配置切换回调试,它就可以工作。我已经从 Web 应用程序中删除了暂存配置,并根据调试配置重新创建了它,但仍然有错误。

我已经坚持了 3 个小时,所以非常感谢任何帮助。

澄清一下,Staging 配置与 Debug 配置完全相同,只是启动 Web 应用程序使用的是 Staging 配置。此配置已根据调试配置删除并重新创建。

0 投票
0 回答
46 浏览

sgen - .NET Reflector 产生的 Sgen 错误

我在项目的.csproj 的目标(构建后)中放置了一个sgen.exe命令。它工作正常,命令生成 XmlSerializers.dll 并且项目按预期使用它。

当拥有该项目的人还使用.NET Reflector 反编译和调试一些引用的第三方程序集时,问题就出现了,此时当您重新编译项目时,sgen.exe 命令会引发错误,因为它无法加载程序集或其中之一它的依赖关系,这是因为外部引用的程序集有一些典型的 Sgen 错误,如“具有相同名称的类型”、“使用相同自定义类型的两个类”等。作为第三方程序集,我无法修改它......并且不使用 .NET Reflector 不是一个选项......有什么解决方案吗?或者反射器中的一个选项来解决它?或者任何人都知道为什么 Sgen 尝试预序列化这些程序集的类型?

谢谢提前...

0 投票
2 回答
1057 浏览

.net - Sgen 和 x64 项目配置以创建 XML Serializers 程序集

看起来有很多类似的问题没有很好的解释。

环境:

赢 7

VS2012 专业版

视窗 SDK 7.0

在我们的环境中,我们生成 2 个代码库 - x86 和 x64。对于这个特定的项目,我们生成*.XMlSerializers.dll. 生成序列化程序集的构建中的设置是Auto.

当我将项目编译为 x64 配置时,我收到 SGEN 错误“尝试以不正确的格式加载程序集... system.data.dll”。此错误完全具有误导性,因为进一步调查得出以下结果:

我用procmonfromsysinternals来追踪 SGEN

  1. AnyCpux86构建时, procmon会显示跟踪。使用的sgen来自C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin(32-bit sngen.exe)
  2. x64构建时,没有跟踪,只有上面提到的错误

我将项目配置设置为将序列化程序创建为OFF并在 x64 中编译程序集。然后我尝试了一个命令行

  1. 在 -中使用 SGEN 取得了成功C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\x64- (请注意 - 这是 64 位 sgen.exe)
  2. 在 x64 程序集上运行 32 位 SGEN 失败。

这些结果得出一个结论:当 VS2012 在Generate Serialization Assemblies设置为ONauto是一种特殊情况)的情况下编译项目时,它会尝试查找sgen.exe。但是,当您的项目配置设置为为 x64 平台构建时,它无法找到合适的sgen.exe,它本身就是为 x64 构建的。

问题:是否有msbuild配置或注册表设置或其他可以设置为允许 Visual Studio 找到合适的 SGEN 的东西?

我知道解决方法,即发布构建事件并将其关闭,但这不是重点。

0 投票
0 回答
119 浏览

c# - 加速 Sgen.exe?

我目前正在开发一个代码生成工具,它采用 XML 模式并生成 C# 类,编译 C# 类并使用 sgen.exe 对它们进行 SGEN 以创建可序列化的 .dll。问题是从 sgen.exe 生成可序列化的 dll 花费的时间太长。这可能是因为我的项目包含大约 1400 个可序列化的类。

sgen.exe 成功完成并生成有效的 .dll,但大约需要 25 到 30 分钟。这使得测试这个项目成为一场噩梦。有没有办法加快这个速度?我可以看到 sgen.exe 只使用了我的处理器的 1 个核心,但我认为这是因为 sgen.exe 不能是多线程的。有什么想法可以加快速度吗?