- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
编辑:在评论中进行了长时间讨论之后,似乎我的原始问题并未真正反映出正在发生的事情。这是我现在所在位置的摘要:
当使用HTTPS时,在我提出第一个HTTPS请求(Web服务调用,WebClient.DownloadFile()等)时,我会认为应用程序的虚拟内存空间发生了急剧的跃升(通常从50mb以下跃升到200mb以上)。
同时,CPU内核的使用率也接近100%。这通常只持续几秒钟,但我看到它的持续时间更长
很有可能这只是使用HTTPS的代价,但我对此感到惊讶,因为我之前从未在其他应用程序中注意到它(而我团队中的其他开发人员也从未在此应用程序中注意到它,早在我上任之前就使用HTTPS)。
更重要的是:这似乎并非在所有机器上都发生,但在大多数机器上都会发生。如果它在每台机器上都持续发生,我将更愿意将其视为“业务成本”。但是由于某些运行相同代码的计算机和操作系统之间似乎确实存在差异,所以我想理解为什么会这样,因为它要么a)允许我们减轻这种行为,要么b)以一种令人满意的方式对其进行解释非技术性的高手,这实际上不是一个“问题”,因为到目前为止,Windows Task Manager可以显示虚拟内存,而不一定主动使用的物理内存并不能令人满意:/
如果有人有兴趣,我将原始帖子保留在下面,但它更多地关注Web服务,而这并不是问题的根源。
预先感谢您提供任何进一步的见解!
每当我们的应用程序首次使用https调用我们的Web服务时,我们就会看到内存使用量急剧增加。具体情况因机器而异,但例如,当进行第一个Web服务调用时,我们可能会看到我们的应用程序从〜50mb跃升到250mb以上,并且使用率从未下降。后续调用不会导致另一个此类跳转。我可以使用下面的代码(不是特定于我们的应用程序)和我们不拥有的公共Web服务来重现该行为,因此它似乎独立于我们的客户端和服务器端代码。
有趣的是,在我的测试应用程序中,我没有在Windows XP上看到这种跳跃(我们的应用程序当前仅部署在Windows 7上)。我们也没有在办公室的每台开发/测试机器上看到它(但是我们在大多数机器上都看到了),并且我们目前还没有办法从“真实世界”中的机器上检索此信息。
我无法确定正在分配的内容,但一些分析器已经清楚地表明它驻留在本机(非托管)内存中。使用DebugDiag对某些WinDbg转储进行的分析使我相信,在crypt32.dll中分配了很多未释放的内存。这在某种程度上是有意义的(https表示证书,安全性等,并且可能正在缓存正在加载的内容,因此为什么后续调用不会导致额外的跳转),但是我很难相信这是实际上只是将https用于Web服务的成本。
我知道“如果更高的内存使用率不会引起问题,为什么会担心?”将会有一些回应。营。总的来说,我同意-任务管理器中的内存使用率数字通常并不表示该应用程序是否按预期工作。如果该应用程序严格在内部使用,则只要它不是其他问题的征兆,我就可以接受。但是我们的应用程序已部署在消费类计算机上,因此我们必须像实际问题一样担心问题的感知。因此,如果有解决此问题的方法,我将不胜感激!
最后,在下面的测试代码中使用的Web服务在这里可用:http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx?wsdl。 EmailVerNoTestEmail的代码是使用wsdl.exe工具生成的,并稍作修改,即将URL作为参数传递给构造函数,而不是对其进行硬编码(以便可以即时指定http / https)。
public static void Main(string[] args)
{
const string urlSuffix = "://ws.cdyne.com/emailverify/Emailvernotestemail.asmx";
string protocol = null;
while(protocol == null)
{
Console.Write("Enter protocol (http, https): ");
var line = Console.ReadLine();
if (line != null) line = line.ToLower();
if (line == "http" || line == "https")
protocol = line.Trim();
}
var url = protocol + urlSuffix;
Console.WriteLine("Using URL: " + url);
Console.Out.Flush();
var service = new EmailVerNoTestEmail(url);
Console.WriteLine("Press any key to make the web service call...");
Console.ReadKey(true);
Console.WriteLine("Calling web service...");
var resp = service.VerifyEmail("test@gmail.com", "test");
Console.WriteLine("Response: " + resp);
Console.WriteLine("Press any key to exit.");
Console.ReadKey(true);
}
最佳答案
除非对系统施加压力,否则将其保持在一定的内存级别是很自然的。操作系统具有试探法,该试探法确定需要多少内存,并分配给大于所需内存的最高点。为什么?分配和释放内存的成本很高,并且如果程序可以在给定的自己的沙箱中运行,那么如果不对系统施加压力,为什么要减少它。
正如您所提到的,关注的不是分配的内存量,而是内存的泄漏。我建议您运行perfmon并监视泄漏;阅读此MSDN CLR文章Investigating Memory Issues中需要注意的内容。
编辑:(这是我之前给出的建议,但可能与主题重复有关/很抱歉)
要查看内存泄漏的明显迹象,可以启动性能监视器,并在性能监视器中查看这些字节的专用字节。请参阅Identify And Prevent Memory Leaks In Managed Code开始该过程。
Windows任务管理器的“进程”选项卡上还有一个要使用的进程。 (查看+选择列),检查句柄,GDI对象和USER对象。观察程序的这些值。如果没有手柄泄漏,您将看到其中之一稳步攀升。在这些情况下,GDI很有可能发生。通常,当OS运行应用程序时,它将尝试确定正在使用多少内存。它将为应用程序分配应用程序当前需要的更多内存。这样做的原因是分配/取消分配内存是CPU密集型操作。当应用程序可以驻留在内存池中时,为什么要并行处理该应用程序需要什么,这将允许该应用程序在不受操作系统干扰的情况下扩展和收缩。节省周期。开发人员看到的是存储器的高水位标记。如果没有给系统施加压力,则系统将不会回收任何内存并保持高水位标记。这个论坛上有很多帖子,用户说处理完毕,内存被清理了,但是操作系统仍然在内存点X(应该是内存点M(下))上显示我的应用程序。 Winform用户报告相同,但如果将应用程序最小化,则报告的内存使用率突然下降到该M级别。这是设计使然。最小化表明应用程序不需要内存,因为它不会与用户交互,并且操作系统将收回这一点。如果它不是Winform,并且没有对操作系统施加压力,则该应用程序将停留在X的高位。
关于c# - 将HTTPS用于Web服务或Web请求时的内存使用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8796463/
发起 HTTPS 对话时,会生成一个随机数来为交换创建 key (或类似的东西)。我不明白这是如何防止重放攻击的。 为什么攻击者不能重复真实客户端发出的所有请求? This answer claims
要使这个简单的 HTTP header 与支持 HTTPS 的服务器通信,还需要进行哪些其他更改。 GET /index.php HTTP/1.1 Host: localhost [CR] [CR]
我想弄清楚 HTTPS 是有状态还是无状态?这是关于我构建的 RESTful API。我们最初使用 HTTP。由于 HTTP 本质上是在无状态的 TCP/IP 上工作的,因此 HTTP 是无状态的,但
我从各种来源了解到,HTTPS 握手是使用 HTTPS 中最重要的部分。我在服务器之间内部使用 POST 来传达信息,并希望为此使用 HTTPS。我想知道实际的 HTTPS 握手持续多长时间/“保持打
我想知道HTTPS是如何实现的。是数据加密还是路径加密(数据通过哪个路径)。如果有人向我提供实现细节,我将不胜感激。 最佳答案 很简单,HTTPS 使用安全套接字层来加密客户端和服务器之间传输的数据。
我是 HTTPS 技术的初学者:(。我对 HTTPS 的实现有一些疑问。 假设我有一张注册表 http://www.sitename.com/register.php 如果我想在 HTTPS 中使用它
在带有 Devise 1.51 的 Rails 3.1.1 应用程序中,我希望确认消息中使用的确认链接是 https 而不是 http。因此,在电子邮件中,“确认链接”会指向如下内容: https:/
我对 HTTPS 有疑问。我的一位前辈告诉我,Https 实际上并不使用 SSL/TLS,而只是使用它们的加密算法。他说,证书的握手过程是在传输层完成的,但实际有效负载的安全 key 加密是在应用层完
我建立了一个使用 PHP mail() 的网站。如果我在 http://上点击脚本,我可以让它成功运行,但如果我切换到 https://它就不起作用了!我使用 Godaddy 进行托管,并通过他们购买
我最近更改了域并设置了来自 https://sadlergatestoyou.co.uk 的重定向至https://www.sadlergates.co.uk但是,www.sadlergatestoy
我正在制作一个依赖于设置 http.proxyPort 和 http.proxyHost 的 Java 应用程序。有两个进程:一个是正则程序,一个是代理程序。我有一个在 http.proxyPort(
我正在开发一个 RESTful 应用程序,为此我需要将从 http 地址传入的请求重定向到它的 https 等效项。我似乎无法使用 ring/compojure 启用 https。 有人有一些有用的教
我看过很多关于重写的文章。都好。但没有一个涵盖这种具体情况。所以这是我的问题:希望你能帮忙。因为我无法让它发挥作用。 我们在domain.com(非www)上运行网站 我们已设置 ssl(因此仅限 h
我需要将大量请求自动提交到基于云的数据库接口(interface) (Intelex)。没有任何方法可以批量提交某些操作,但是提交单个请求所必需的只是让经过身份验证的用户尝试打开 Web 链接。因此,
我正在使用 https 设置一个独立的(非嵌入式) jetty 9.2.1。 我在本地机器上使用自签名证书玩了一会儿,一切顺利。 现在我正在设置一个 uat 服务器(类似于我将在生产中获得的服务器),
我对 Web 开发(从今年 1 月开始)和 Web 安全(在不到一周前开始!)都是新手,所以如果我的问题完全没有受过教育、误导或简单愚蠢,请原谅我。 我工作的公司的主要产品是一个很好的老式客户端/服务
HTTPS头是否加密到什么程度(如果有的话)? 最佳答案 它们在通过SSL传输时被加密。没有专门用于 header 的特殊加密,HTTPS对整个消息进行加密。 关于https - HTTPS head
在 HTTPS 安全模型中,最薄弱的部分是浏览器中的可信 CA 列表。有人可以通过多种方式将额外的 CA 添加到用户信任错误的人的列表中。 例如,您公司的公用计算机或 PC。管理员可能会强制您信任自己
我们最近切换到 HTTPS,当提交我们的一个表单时,Firefox 会弹出: Although this page is encrypted, the information you have ent
我知道没有愚蠢的问题,但这是:您能否在完全支持 https 的网站上通过 AdSense 或其他方式转换基于上下文的广告? 最佳答案 更新: We’ve updated the AdSense ad
我是一名优秀的程序员,十分优秀!