Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 静态分析以防止;收集被修改;枚举操作不能执行";例外_.net_Visual Studio 2010_Code Analysis - Fatal编程技术网

.net 静态分析以防止;收集被修改;枚举操作不能执行";例外

.net 静态分析以防止;收集被修改;枚举操作不能执行";例外,.net,visual-studio-2010,code-analysis,.net,Visual Studio 2010,Code Analysis,我现在正在使用VisualStudio2010,它附带了一个很好的代码分析工具 有没有一种方法可以指示它查找在迭代集合时试图修改集合的调用?其他的代码分析能做到吗 目标是防止运行时出现异常,如标题中的异常。这通常是由线程引起的错误,没有正确锁定对线程之间共享的集合的访问。在迭代集合的代码中特别容易被忽略,因为这本身就是一个线程安全的操作。在迭代过程中添加或删除元素是导致kaboom的原因。是的,很难诊断,因为它不会发生在修改集合的代码上。你只有在损害发生很久之后才能发现 在非线程代码中也可以,但

我现在正在使用VisualStudio2010,它附带了一个很好的代码分析工具

有没有一种方法可以指示它查找在迭代集合时试图修改集合的调用?其他的代码分析能做到吗


目标是防止运行时出现异常,如标题中的异常。

这通常是由线程引起的错误,没有正确锁定对线程之间共享的集合的访问。在迭代集合的代码中特别容易被忽略,因为这本身就是一个线程安全的操作。在迭代过程中添加或删除元素是导致kaboom的原因。是的,很难诊断,因为它不会发生在修改集合的代码上。你只有在损害发生很久之后才能发现

在非线程代码中也可以,但这很容易调试


不存在可以分析代码中定时问题的静态分析器。执行时间是完全不确定的。如果他们这样做了,那么编写线程安全代码就容易多了。任何在不完全破坏效率的同时解决此问题的人都将获得诺贝尔奖。

可以编写一条规则来检查一种特殊情况:在检索枚举数和调用枚举数的MoveNext()或Reset()方法之间同步修改集合。不幸的是,这在实践中也很困难,因为每个可枚举类型都可以实现不同的修改检测,因此检测实际的修改将非常重要

基本上,这类事情是不值得的,除非你有很多问题,由于这个可寻址的场景。通常情况下不应该是这样,因为在标准测试期间很容易检测到