c# - 当 SSL 和客户端证书与 HttpWebRequest 对象一起使用时发生内存泄漏

标签 c# windows ssl memory-leaks httpwebrequest

我正在使用 HttpWebRequest 对象通过客户端证书使用 SSL 上传文件,我的服务器上有一个有效的证书,我的应用程序有内存泄漏问题和 Microsoft已在以下链接上发布了与该问题相关的内容:

FIX: Memory Leak When SSL and Client Certificates Are Used With the HttpWebRequest Object

是否有任何解决方法可以避免此内存泄漏,特别是每个请求都消耗 8K 泄漏内存,这将导致我的应用程序消耗如此多的内存。


 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
 ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateRemoteCertificate);
 request.Method = "POST";
 request.ContentType = "text/xml; charset=utf-8";

使用 .NET Memory Profiler 检测到内存泄漏它显示 HttpWebRequest 对象具有泄漏内存的字节数组,我正在放置流和请求对象。

我已经用 SSLwithout SSL 尝试过这种情况,泄漏在非 SSL 请求中消失了。

最佳答案

只需将 HttpWebRequest 对象的 AllowWriteStreamBuffering 属性设置为 false:

request.AllowWriteStreamBuffering = false;
request.AllowAutoRedirect = false;

注意:框架会在创建 SSL session 时缓存它们,并在可能的情况下尝试为新请求重用缓存的 session 。尝试重用 SSL session 时,框架使用 ClientCertificates 的第一个元素(如果有的话),或者如果 ClientCertificates 为空,则尝试重用匿名 session 。

其他注意事项:出于性能原因,您不应将客户端证书添加到 HttpWebRequest,除非您知道服务器会要求它。 有关说明如何枚举客户端证书存储中的证书的代码示例,请参阅 X509Certificate2Collection 类。

或者尝试使用这个:

request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore); 

关于c# - 当 SSL 和客户端证书与 HttpWebRequest 对象一起使用时发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6082753/

相关文章:

c# - 在 C# 的 nhibernate 查询中动态添加到 where 子句的最佳方法是什么?

c# - 字典初始值设定项中的 KeyValuePair 类型推断

java - SSLv3 连接不起作用

c# - 在 Workflow Foundation 4 中管理 ObjectContext

c# - 将字符串从数组转换为 int

windows - waveOutWrite API 方法回调的延迟(或延迟)时间是多少?

php - 关于在 php 中发送邮件的 fsockopen() 错误

java - 如何检索不受信任的 SSL 服务器证书以查看和信任它?

sql-server - SQL Server Express(或任何版本)可以在树莓派上运行吗?

mysql - 在 Windows 上设置 MySQL 比在 Linux 上设置困难吗?