Tag: 分析

“P / Invoke入口点应该存在”,应该指出正确的入口点

我从Visual Studio 2012中的代码分析工具收到此警告。代码如下所示: using System; using System.Runtime.InteropServices; namespace MyProgramNamespace { class NativeMethods { [DllImport(“user32.dll”, EntryPoint = “GetWindowLongPtr”)] public static extern IntPtr GetWindowLongPtr(IntPtr handle, int flag); [DllImport(“user32.dll”, EntryPoint = “SetWindowLongPtr”)] public static extern IntPtr SetWindowLongPtr(IntPtr handle, int flag, IntPtr ownerHandle); } } 我正在编译x64,所以我不关心使用旧的GetWindowLong和SetWindowLong。 据我所知,这些入口点名称是正确的。 编辑:已解决。 原来问题是Visual Studio本身(因此代码分析工具)是32位。 当代码分析工具检查user32.dll以查看是否存在这些函数时,它会检查32位版本的user32.dll(在C:/ Windows / SysWOW64 /中)而不是程序实际使用的版本(64位版本)在C:/ Windows / System32中,这些函数只存在于64位版本中(32位版本使用GetWindowLong / […]

当我对一个程序进行抽样时它是如何实现的,它实际上比不进行分析更快?

我使用DotTrace 4.5性能 发布模式下的时间: 2400000000 Basic: 00:00:08.8051103 2400000000 Five: 00:00:09.1561338 2400000000 Overload: 00:00:16.3740938 2400000000 IListtoFive: 00:00:15.5841445 在发布模式下进行性能分析的时间。 2400000000 Basic: 00:00:01.0048224 2400000000 Five: 00:00:03.5416982 2400000000 Overload: 00:00:11.8009959 2400000000 IListtoFive: 00:00:11.2568770 我的代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; namespace testLineIndex { class Program { static long Five(int s0, int s1, int s2, int s3, […]

c#visual studio 2017 CPU分析内存exception

我有一个长期运行的c#应用程序,我正在浏览Visual Studio 2017社区版。 在我停止分析(和应用程序)以查看CPU使用率之前运行大约2/3小时。 但是我可以看到它在构建报告时内存使用量增加3GB然后抛出内存不足exception。 Profiling started. Profiling process ID 7312 (test). Starting data collection. The output file is C:\Users\jamie\Source\Repos\test(1).vspx Profiler stopping. Stopping data collection. Merging collection data. Please wait… Data is saved in file C:\Users\jamie\Source\Repos\test(1).vspx Profiling finished. Exception of type ‘System.OutOfMemoryException’ was thrown. 我能做些什么来解决这个问题,还是只需要获得更多内存? 奇怪的是,我的机器上的总内存使用率大约是65%,因此它甚至没有使用我所有的内存来构建分析报告。 这是VS的全新安装,它具有所有默认设置。

Roslyn:如何使用Roslyn C获取DeclarationSyntax的命名空间#

我有一个包含一些类文件的ac#解决方案。 通过Roslyn,我能够解析解决方案以获得解决方案中的项目列表。 从那里,我可以获得每个项目的文件。 然后,我可以获得每个ClassDeclarationSyntax的列表。 这是起点。 foreach (var v in _solution.Projects) { //Console.WriteLine(v.Name.ToString()); foreach (var document in v.Documents) { SemanticModel model = document.GetSemanticModelAsync().Result; var classes = document.GetSyntaxRootAsync().Result.DescendantNodes().OfType(); foreach(var cl in classes) { // Starting around this point… ClassDiagramClass cls = new ClassDiagramClass(cl, model); diagramClasses.Add(cls); } } } 从这些对象我希望能够获得每个类中使用的变量的命名空间。 参见文件1有一个方法“getBar()”,它返回一个B.Bar类型的对象。 命名空间很重要,因为它告诉您实际返回的是哪种类型的Bar。 File1.cs using B; namespace A { […]

如何在Visual Studio 2008“Pro”中执行性能分析

微软制作了一款名为“Visual Studio 2008 Professional”的软件。 我发现似乎没有应用程序性能分析器或类似的东西,使它看起来不那么“专业”。 如果Microsoft不包含探查器,那么Visual Studio 2008的时间分析的第三方选项是什么? 免费是更可取的,因为这是为了学生目的:P

我的(巨大的)应用程序抛出OutOfMemoryException,现在是什么?

这是迄今为止我构建的最复杂的软件,现在它似乎在某些时候耗尽了内存。 我还没有进行过广泛的测试,因为我有点迷失了我应该如何解决手头的问题。 HandleCount: 277 NonpagedSystemMemorySize: 48136 PagedMemorySize: 1898590208 PagedSystemMemorySize: 189036 PeakPagedMemorySize: 1938321408 VirtualMemorySize: 2016473088 PeakVirtualMemory: 2053062656 WorkingSet: 177774592 PeakWorkingSet: 883834880 PrivateMemorySize: 1898590208 PriviligedProcessorTime: 00:00:15.8593750 UserProcessorTime: 00:00:01.6562500 TotalProcessorTime: 00:00:17.5156250 GDI Objects: 30 User Objects: 27 我有一个自动化的全局exception捕获器,在exception时收集上述信息(使用System.Diagnostics.Process) – 以及exception信息,日志和屏幕截图 – 并通过电子邮件发送给我所有内容。 这已经很好地工作了,因为我已经能够根据电子邮件信息插入错误。 到目前为止,这是。 该软件有数万行,并使用托管和非托管资源。 我可以逐行开始编写代码,但有些我觉得这可能不是尝试推断内存构建问题的最佳方法。 由于我以前从未做过这种分析,你会如何建议解决这类问题?

OutOfMemoryException – 出于想法

我知道我的问题没有简单的答案,但我会欣赏想法,指南或某些东西 – 看看清单 我有一个不断抛出OutOfMemoryException的网络Windows服务。 该服务有两个用于x86和x64 Windows的版本。 但是在x64上它消耗了更多的内存。 我尝试使用各种内存分析器对其进行分析。 但我无法弄清楚问题是什么。 诊断 – 服务消耗了大量的VMSize并在3到12小时后崩溃应用程序。 行为是相当随机的 – 崩溃情景没有可观察的模式。 我还试着看一下性能计数器(perfmon.exe)。 我可以看到堆大小正在增长,%GC时间平均为19%。 内存分配与%CPU时间相关。 我的应用程序有线程和锁定对象,数据库连接和WCF接口。 我想解决的一般问题: GC GC对象或某些非托管(窗口)对象消耗内存的速度是否足够快? 请参阅列表中的第一个应用程序http://s45.radikal.ru/i109/1003/af/92a389d189e8.jpg http://s45.radikal.ru/i109/1003/af/92a389d189e8.jpg 带有性能计数器的图片链接查看http://s006.radikal.ru/i215/1003/0b/ddb3d6c80809.jpg

以编程方式查找对象使用的内存

有没有办法以编程方式准确地确定c#中对象使用的内存量? 我不关心这个过程有多慢,所以左右运行GC是可以接受的(当然我更喜欢更高效的东西)。 序列化对象并查看结果长度似乎不太准确(在这个方法的简单测试中,我看到一个整数返回值为54)。 使用GC.GetTotalMemory(true)似乎会产生不一致的值,更不用说它们看起来太大了。 使用Marshal.SizeOf(object)生成准确的结果,但只能使用基元。 如果这些行中没有任何内容可用,则可以选择根据所使用的结构和所涉及的原语来计算大小。 这也是可以接受的(尽管令人不安),但我需要知道计算对象开销等的正确方法。任何能够向我展示这种方法的文献都会很棒。 类似的SO问题(其中没有一个似乎具有准确计算对象大小的具体方法): C#/ .NET对象使用多少内存? 如何在C#中获取或使用内存 如何在内存中获取对象大小? sizeof()等效于引用类型? 配置内存的工具(非程序化方法): http://www.microsoft.com/en-us/download/details.aspx?id=16273 找出C#中对象使用了多少内存?

任何说明每个方法运行多长时间的工具?

我程序的某些部分很慢。 我想知道是否有可以使用的工具,例如它可以告诉我运行方法A()花了100毫秒等等……或者类似的有用信息。

启动VS Profiler可提升应用程序性能x20?

编辑1 我根本不排除这可能是由于使用Profiler的一些非常基本的副作用(我的“常规”项目中的一些错误设置) 我想在我的应用程序中改进计算时间,所以我决定进行彻底的分析分析。 所以我刚刚启动了.Net内存分配配置文件来分析我的应用程序。 我完全惊呆了,观看计算速度快了20倍 ! 应用程序包括从带有BackgroundWorkers的二进制文件中读取数据,处理它们, 并将结果存储到MSSQL DB中。 每轮通常需要20秒,而分析它几乎需要1秒。 我检查并确保两种情况下结果一致。 一个.Net实验的朋友告诉我,探查器优化了线程并“以某种方式”找到了通过线程锁和瓶颈的方式,但我简直不敢相信。 所以我的问题是: 究竟发生了什么,现在和为什么? 如何使我的代码本机行为? 编辑2 我知道这听起来很疯狂,令人难以置信。 我自己仍然非常怀疑。但它是真的。 在分析器运行时,SAME代码运行得非常快。 我使用SAME测试数据,并观察SAME计算输出。 我无法给出一个简单的复制项目,因为它是一个相对较大的框架。 我正在使用Visual Studio 2010 Profiler。 我将尽可能多地提供关于流程的详细信息,一旦找到它,我肯定会发布一条线索。 定期运行日志: 03/23/2011 18:04:34 | 180434.621 | 模拟集[5] – [1] – [5 PC-1 0 [SET 1/48] 03/23/2011 18:05:01 | 180501.271 | 处理时间:00:00:26.6515244 等等.. Profiler运行LOGS: 03/24/2011 11:38:15 | 113815.592 | 模拟集[5] […]