C# WCF - 客户端/服务器 - System.OutOfMemory 异常

2023-12-06

问题。

  • 使用 Net TCP 绑定(发布者/订阅者模式)的 C# WCF 客户端/服务器应用程序。
  • 客户端不断崩溃OutOfMemoryException.
  • 当我与客户端一起运行任务管理器时,我可以看到“内存使用情况”列不断增加,直到应用程序崩溃。
  • 目的是让客户端的多个实例在不同的计算机上运行。

Scenario

  • 我有一个客户端/服务器应用程序。
  • 发布者/订阅者设计模式。
  • 在服务器端,有 6 个字典组成缓存,每个字典都包含一个自定义对象作为值。
  • 每组字典值作为 while 循环的一部分每 5 秒更新一次。
  • 在 5 秒循环结束时,6 个字典被添加到一个数据契约对象中,每个字典作为不同的数据成员。
  • 然后,数据协定对象通过线路发送到客户端,其中还有 6 个字典。
  • 然后,我循环遍历每个数据协定字典,并添加或更新其客户端等效内容,具体取决于值是否已存在。

Summary

  • 6 个字典服务器端。
  • 数据契约中的 6 个可序列化字典。
  • 6 个客户端可绑定词典。
  • WCF 使用 Net TCP 绑定通过线路传输数据。

规格

  • C# .Net 3.5
  • 客户端使用一个 DevExpress 表单和 9 个 DX 网格视图和选项卡控件。
  • 大多数自定义对象都包含“子资产”字典。 - 我为这个属性使用了一个可绑定字典,我想当你有几百个对象时,它会产生开销(尽管我不认为使用可序列化字典会有多大区别,因为它们都包含相同的序列化代码) 。
  • 两侧的绑定在开始时以编程方式创建一次,并包含相同的设置(见下文)。

    NetTcpBinding netTcpBinding = new NetTcpBinding(SecurityMode.None);
    
    EndpointAddress endpointAddress = new EndpointAddress(EndpoindAddress);
    InstanceContext context = new InstanceContext(callbackinstance);
    
    netTcpBinding.MaxConnections = 5;
    netTcpBinding.MaxBufferSize = 2147483647;
    netTcpBinding.MaxBufferPoolSize = 2147483647;
    netTcpBinding.MaxReceivedMessageSize = 2147483647;
    netTcpBinding.ReceiveTimeout = TimeSpan.MaxValue;
    netTcpBinding.CloseTimeout = TimeSpan.MaxValue;
    netTcpBinding.TransferMode = TransferMode.Buffered;
    netTcpBinding.ListenBacklog = 5;
    
    DuplexChannelFactory<ISubscription> channelFactory =
       new DuplexChannelFactory<ISubscription>(
              new InstanceContext(this), 
              netTcpBinding,
              endpointAddress);
    
    proxy = channelFactory.CreateChannel();
    

我的问题

  • 如何防止客户端内存使用量不断增长?
  • 如果我只发送对象的通用列表而不是可序列化的字典,客户端上的内存使用量是否会显着降低?
  • 我是否为这种实现正确设置了绑定配置?
  • 任何其他解决此内存问题的建议将不胜感激。

•我怎样才能预防 客户端界面刚刚成长 记忆力呈指数级增长 用法?

嗯,它不会呈指数增长,但请确保你没有零散的参考, 特别是查找可能引用您的杂散对象的事件和 lambda

• 内存使用情况是否会 如果我发送,客户端会低得多 仅对象的通用列表为 反对可序列化的字典?

我对此表示怀疑。

•我是否已设置我的绑定 此类配置正确 的实施?

没有看到他们有任何明显的问题

•解决此问题的任何其他建议 内存问题会很大 赞赏。

查一下Windbg,它需要时间来正确学习,但它可以帮助你看到什么引用了什么......它可能不是你所期望的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# WCF - 客户端/服务器 - System.OutOfMemory 异常 的相关文章

  • 使用 ADAL v3 使用 ClientID 对 Dynamics 365 进行身份验证

    我正在尝试对我们的在线 Dynamics CRM 进行身份验证以使用可用的 API 我能找到的唯一关于执行此操作的官方文档是 https learn microsoft com en us dynamics365 customer enga
  • 关于逻辑/算法的想法以及如何防止线程写入 Sql Server 中的竞争

    我有以下逻辑 public void InQueueTable DataTable Table int incomingRows Table Rows Count if incomingRows gt RowsThreshold async
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • Boost ASIO 串行写入十六进制值

    我正在使用 ubuntu 通过串行端口与设备进行通信 所有消息都必须是十六进制值 我已经在 Windows 环境中使用白蚁测试了通信设置 并得到了我期望的响应 但在使用 Boost asio 时我无法得到任何响应 以下是我设置串口的方法 b
  • C# 中一次性对象克隆会导致内存泄漏吗?

    检查这个代码 class someclass IDisposable private Bitmap imageObject public void ImageCrop int X int Y int W int H imageObject
  • 2个对象,完全相同(除了命名空间)c#

    我正在使用第三方的一组网络服务 但遇到了一个小障碍 在我手动创建将每个属性从源复制到目标的方法之前 我想我应该在这里寻求更好的解决方案 我有 2 个对象 一个是 Customer CustomerParty 类型 另一个是 Appointm
  • MVC 5 中具有 ASP.NET Identity 的 Autofac 不会验证 OWIN 管道中的安全标记

    我在 MVC 5 中设置了 AutoFac 来与 ASP NET Identity 一起使用 表面上一切似乎都工作正常 即用户可以创建帐户并登录 但后来我发现 当安全标记更改时 用户不会注销 通过在 AspNetUsers 表中进行暴力破解
  • 为什么这个 makefile 在“make clean”上执行目标

    这是我当前的 makefile CXX g CXXFLAGS Wall O3 LDFLAGS TARGET testcpp SRCS main cpp object cpp foo cpp OBJS SRCS cpp o DEPS SRCS
  • 如何防止 Blazor NavLink 组件的默认导航

    从 Blazor 3 1 Preview 2 开始 应该可以防止默认导航行为 https devblogs microsoft com aspnet asp net core updates in net core 3 1 preview
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • 以编程方式创建 Blob 存储容器

    我有一个要求 即在创建公司时 在我的 storageaccount 中创建关联的 blob 存储容器 并将容器名称设置为传入的字符串变量 我已尝试以下操作 public void AddCompanyStorage string subDo
  • 使用 gcc 时在头文件中查找定义的好方法是什么?

    在使用 gcc 时 有人有推荐的方法在头文件中查找定义吗 使用 MSVC 时 我只需右键单击并选择 转到定义 这非常好 我使用过 netbeans gcc 它确实有代码帮助 包括到定义的超链接 所以这是一种选择 但是 我想知道是否有任何其他
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • 如何编写一个接受 int 或 float 的 C 函数?

    我想用 C 语言创建一个扩展 Python 的函数 该函数可以接受 float 或 int 类型的输入 所以基本上 我想要f 5 and f 5 5 成为可接受的输入 我认为我不能使用if PyArg ParseTuple args i v
  • 在 C# 的 WebAPI 中的 ApiController 上使用“传输编码:分块”提供数据

    我需要服务分块传输使用编码数据API控制器 因为我无权访问HttpContext or the Http请求 我有点不知道在哪里写入响应以及在哪里刷新它 设置如下 public class MyController ApiControlle
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • 声明一个负长度的数组

    当创建负长度数组时 C 中会发生什么 例如 int n 35 int testArray n for int i 0 i lt 10 i testArray i i 1 这段代码将编译 并且启用 Wall 时不会出现警告 并且似乎您可以分配
  • 如何在 C# 中获取 CMD/控制台编码

    我需要指定正确的代码页来使用 zip 库打包文件 正如我所见 我需要指定控制台编码 在我的例子中为 866 C Users User gt mode Status for device CON Lines 300 Columns 130 K

随机推荐

  • 获取编辑元素的删除事件

    我正在尝试模拟 不存在的 更改事件contentEditable元素 但我猜这对于输入元素来说是同样的问题 不幸的是 当用户选择一些文本并从浏览器的上下文菜单中选择 删除 时 我不知道如何获取事件 有什么建议我可以如何得到它吗 修订后的答案
  • Python Regex - 在文本文件中的(多个)表达式之间提取文本

    我是一名 Python 初学者 如果您能帮助我解决文本提取问题 我将非常感激 我想提取文本文件中两个表达式之间的所有文本 字母的开头和结尾 对于两者 字母的开头和结尾都有多种可能的表达式 在列表 letter begin 和 letter
  • 如何在表格视图底部添加新行 - 聊天消息

    每次用户键入消息并单击 发送 时 我都会使用以下代码添加新消息 效果很好 但问题是 新消息被插入到表视图的顶部 我希望将其插入底部 import UIKit class ViewController UIViewController UIT
  • NServiceBus:指定消息顺序

    我在它自己的进程中使用 NServiceBus 所以not使用通用主机 我希望按特定顺序为一条消息提供多个消息处理程序 对于通用主机 您将实施ISpecifyMessageHandlerOrdering 但我不知道在托管您自己的 NServ
  • 使用 strut2 jquery 插件标签将 JSON 对象发送到 Struts 2 操作

    我们可以通过以下方式将 JSON 发送到 Struts2 操作json拦截器 有很好的样本http tech learnerandtutor com send json object to struts 2 action by jquery
  • 文件夹内容更改时重新启动 ASP.NET 应用程序

    我正在编写一个带有 插件 的网络应用程序 这些插件将是 DLL 文件 它将通过预定义的接口和东西导出其功能 所有 DLL 文件都位于名为 Plugins 的文件夹中 ASP NET 应用程序在启动时加载它们 通过使用 Assembly Lo
  • 带有文本的纹理,看起来像素化,如何在 unity3d 中解决这个问题?

    我使用 1024x1024 纹理 它映射到 Unity3d 中的四边形 目前的目标平台是 PC 独立平台 它看起来是这样的 您可以看到屏幕中的对象有多么像素化和模糊 如何才能使其更具可读性并减少像素化 导入设置 质量设置和关闭 mip ma
  • 读取/写入 Excel 2007 受密码保护的文档

    Office 2007 使用什么方法进行加密 当从 Office 菜单中选择 加密 并设置密码时 我的 C 应用程序需要创建和读取加密的 Excel 2007 文件 xlsx 重要的是这些文件仍然可以从 Excel 访问 因此我必须使用 M
  • 更改 BlobBuilder 中的文件名以作为 XHR 上的 FormData 传递

    我目前正在尝试将 ArrayBuffer 上传到服务器 我无法更改 该服务器需要我以多部分 表单数据格式上传的文件 服务器从Content Disposition部分的filename将被保存并在Content type提供文件时将使用的
  • 当计算使用后台线程时,如何正确声明计算属性?

    我试图声明一个由块组成的计算属性 在后台线程中执行 因此 当我处理这个属性时 它是零 因为计算在未准备好时返回结果 如何更好地纠正这个问题 谢谢你 enum Result
  • NestJS CLI 输出垃圾

    我已经使用过 NestJS 相当多了 而且它也是 CLI 但是当我现在想使用它时 它开始输出垃圾 我尝试的每个命令 nest nest info nest new npm run start dev This started happeni
  • 如何防止 app.config 集成到 .net 库 (dll) 中

    当我编译库时 Settings Settings 中的所有设置都集成到 DLL 中 我该如何防止这种情况 查看Settings settings文件的属性 并将 构建操作 设置为 资源 将 复制到输出目录 设置为 不复制 这应该会创建一个
  • Symfony 6无法使用mailer发送电子邮件(未配置数据库)

    大家好 我刚刚开始使用 Symfony6 构建网络 我尝试使用邮件程序发送电子邮件 但它以某种方式需要配置数据库 为消息创建一些特殊表 也许有一些解决方法 因此它可以在没有数据库的情况下工作 在 Symfony 5 中没有问题 如果在 co
  • 检查 Python While 循环中的值是否仍然保持不变

    我想知道是否有一种优雅的方法来查看是否可以检查在 while 循环中不断变化的值 并在该值停止变化并保持不变时停止 while 循环 例如 Value 0 while True value changes everytime if valu
  • 借助 PHP 和 HTML 动态创建行和列

    我想在 PHP 和 HTML 的帮助下创建动态行和列 但我对这段代码有点困惑 因此非常感谢一些帮助 table table 场景很简单 Mysql 数据从 for each 循环返回 6 条记录 结果将如下图所示 同样的方式 Mysql 数
  • 在 array.xml 中添加超链接文本

    我正在使用 array xml 创建列表并将其填充到 listView 中 问题是我需要在 arrayItem 描述中添加一个超链接文本 这样当我将其填充到 listView 中时 它应该链接到我的网站
  • 我是否需要 Content-Type: application/octet-stream 来下载文件?

    The HTTP标准 says 如果在响应中使用此标头 Content Disposition Attachment 对于 application octet stream 内容类型 隐含的 建议用户代理不应显示响应 但是 直接进入 将响应
  • java泛型,如何从两个类扩展?

    我想要一个 Class 对象 但我想强制它所代表的任何类扩展 A 类和 B 类 我可以
  • 如何在 C# 中获取对象的小写名称(即使为 null)[重复]

    这个问题在这里已经有答案了 我有C 方法 private static string TypeNameLower object o return o GetType Name ToLower 给我输入对象的小写类型名称 但是 如果输入是设置
  • C# WCF - 客户端/服务器 - System.OutOfMemory 异常

    问题 使用 Net TCP 绑定 发布者 订阅者模式 的 C WCF 客户端 服务器应用程序 客户端不断崩溃OutOfMemoryException 当我与客户端一起运行任务管理器时 我可以看到 内存使用情况 列不断增加 直到应用程序崩溃