Tag: 诊断

如何用Roslyn中的var替换字符串变量?

对于本地声明,例如:string a = string.Empty; 如何编写诊断程序将其更改为:var a = string.Empty;

Roslyn重命名Majusucle中的变量const

试图转换: const string maj = “variable”; 在 const string MAJ = “variable”; 我正在使用CodeFix的Diagnostic。 我已经完成了诊断: var localDeclarationConst = node as LocalDeclarationStatementSyntax; if (localDeclarationConst != null && localDeclarationConst.Modifiers.Any(SyntaxKind.ConstKeyword) ) { foreach (VariableDeclaratorSyntax variable in localDeclarationConst.Declaration.Variables) { var symbol = model.GetDeclaredSymbol(variable); if (symbol != null) { string varName = symbol.Name; if (!varName.Equals(varName.ToUpper())) { addDiagnostic(Diagnostic.Create(Rule, localDeclarationConst.GetLocation(), “Les constantes doivent […]

C#Roslyn更改了评论类型

我正在尝试为Visual Studio做一个扩展,它改变了代码中的一些语法。 实际上,我已经完成了第一步,即改变变量的名称,如果这个名称不是我们在公司使用的规则。 例如: int newVariable; double test; 将改为: int iNewVariable; double dblTest; 现在我必须更改此类评论:(SingleLineComment) //this is a single line Comment 进入MultiLineComment /*Here it’s a MultiLine one*/ 我使用Roslyn语法Visualiser来查找生成正确代码的类型和种类,但没有任何作用。 这就是我为Diagnostic做的事情: using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; using System.Threading; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Diagnostics; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp.Syntax; namespace CodeFix { [DiagnosticAnalyzer] [ExportDiagnosticAnalyzer(DiagnosticId, LanguageNames.CSharp)] public class DiagnosticAnalyzer […]

TextWriterTraceListener不起作用

配置文件: 代码: static void Main(string[] args) { try { Trace.WriteLine(“Running BiFit Test Server.”); } } 我可以在cosole窗口看到文字。 并且文件已创建,但它已空。 我记得某处有Autoflush属性吗?

你能在C#中获得堆栈上的变量列表吗?

所有,只是想知道在.NET / C#中是否可以获得堆栈中的变量列表及其值? 我正在为我的应用程序创建一个exception处理程序,除了标准的堆栈跟踪之外,我还想查看堆栈中任何变量的名称和值。 不知道是否可以这样做?

测量ASP.NET MVC 3的性能

我在ASP.NET MVC 3中构建了一个JSON服务,我希望能够测量应用程序中操作的执行时间(我希望它能够自动记录慢速操作)。 因此看起来很棒; http://coderjournal.com/2010/10/timing-the-execution-time-of-your-mvc-actions/ (这里有关于堆栈溢出的地方也提到了) 问题是我得到的测量结果必然是错误的; 我添加了另一个秒表,它启动动作中的第一件事并在返回前停止。 例: 方法里面的秒表=> 10ms (这里省略了序列化到json,所以我可以理解它比实际更短) 秒表属性(上面的代码)=> 676ms Firefox称该请求耗时=> 70ms 。 我相信firefox在这里有正确的时间(但它包含下载所以它有点大),但我想了解为什么属性代码不起作用,对此有什么想法?

进程内存大小 – 不同的计数器

我试图找出我自己的.Net服务器进程正在使用多少内存(用于监视和记录目的)。 我正在使用: Process.GetCurrentProcess().PrivateMemorySize64 但是,Process对象有几个不同的属性,让我可以读取使用的内存空间:Paged,NonPaged,PagedSystem,NonPagedSystem,Private,Virtual,WorkingSet 然后是“峰值”:我猜测它只存储了最后一次所用的最大值。 阅读每个属性的MSDN定义对我来说并没有太大帮助。 我必须承认我对内存管理方式的了解(就分页和虚拟内容而言)非常有限。 所以我的问题显然是“我应该使用哪一个?”,我知道答案是“它取决于”。 这个过程基本上会在内存中保存一堆列表,而其他进程与它进行通信并查询它。 我期待运行它的服务器需要大量的RAM,所以我随着时间的推移查询这些数据,以便能够估计RAM要求与其保留的列表大小相比。 那么……我应该使用哪一个?为什么?

为什么第二个for循环总是比第一个循环执行得快?

我试图弄清楚for循环是否比foreach循环快,并且正在使用System.Diagnostics类来为任务计时。 在运行测试时,我注意到我先放入的循环总是比最后一个慢。 有人可以告诉我为什么会这样吗? 我的代码如下: using System; using System.Diagnostics; namespace cool { class Program { static void Main(string[] args) { int[] x = new int[] { 3, 6, 9, 12 }; int[] y = new int[] { 3, 6, 9, 12 }; DateTime startTime = DateTime.Now; for (int i = 0; i < 4; i++) { […]

Visual Studio 2015诊断工具不再有效

我在Windows 7 SP1 64位上运行Visual Studio 2015 Community Edition Update 3,我用它来开发C#应用程序。 我喜欢在调试过程中使用诊断工具来尽早发现性能问题。 但是,他们在过去一个月左右的某个时间停止了为我工作(可能与安装Update 3有关,尽管我没有任何信息可以支持它)。 我看到错误消息“在此版本的Windows上无法进行调试时的CPU分析。要查看CPU使用情况详细信息,请运行不使用调试器的CPU使用率工具(Debug – > Performance Profiler …)。” 我尝试过的事情没有成功: 完全卸载并重新安装VS. 在我的VS安装上执行修复 确保在调试选项中禁用“使用{Managed,Native}兼容模式”。 按照此问题中的说明启用诊断中心日志记录信息。 我可以看到的错误消息不会出现在日志中。 即使我创建了一个新的WPF项目,这仍然会发生,所以我不相信它有任何项目特定的原因。 还有其他我可以试试的东西吗? 显然他们之前正在工作,所以我不相信有关我的Windows版本的错误消息不受支持。

从ProcessThread获取托管线程

在我们无法重现的生产环境中,我们会定期关闭Windows服务。 可能需要几个月才能再次发生。 我正在进行一些诊断尝试并帮助解决这个问题,我正在研究的一件事是在我们开始关闭应用程序后将事件添加到系统线程池60秒。 我们的应用程序应在10秒内完全关闭。 在这种情况下,我想跟踪流程的剩余运行线程到事件日志。 我可以使用System.Diagnostics.Process.GetCurrentProcess.Threads获取正在运行的线程。 这些线程对象具有本机Win32线程ID等。 我想知道是否有任何方法可以从这些线程ID返回到它们在当前进程中表示的任何托管线程。 我试图这样做的原因是因为我们的线程池和其他线程产生了我们给出了代表它们目的的名称,这将有助于将它们取回。