我正在使用C#中的ManagementObjects和foreach循环。 Coverity声称这样的代码存在泄漏:
2015-09-22 13:22:18.574 addEventUI[33834:4374868] Add as {
NSFont = "<UICTFont: 0x7ae6bce0> font-family: \"Avenir-Book\"; font-weight: normal; font-style: normal; font-size: 14.00pt";
}Event 1{
NSFont = "<UICTFont: 0x7ae6bdd0> font-family: \"Avenir-Heavy\"; font-weight: bold; font-style: normal; font-size: 14.00pt";
}
这是真正的泄漏还是假阳性?
这里是否需要使用块(这是我最初尝试避免泄漏)?
我的想法是,这是一个实现IDisposable的托管集合,调用者不应该负责销毁它。我之前看到过以下代码,但似乎它使用了更多的块来走错路径:
ObjectQuery myQuery = new ObjectQuery("Select * from Win32_Printer");
using (ManagementObjectSearcher mySearcher = new ManagementObjectSearcher(myQuery))
{
// alloc_fn: A new resource is returned from allocation method Current.get
// var_assign: Assigning: mo = resource returned from mo$iterator.Current
foreach (ManagementObject mo in mySearcher.Get())
{
foreach (PropertyData p in mo.Properties)
{
// do stuff, maybe return a string
}
}
}
// leaked_resource: Returning without closing mo leaks the resource that it refers to
return "";
答案 0 :(得分:1)
import re
Spresence = []
with open('yourFile.txt') as FL:
for line in FL.readlines()[1:]:
m = re.match("\S+\s+\S+\s+\S+\s+(.*)", line)
if m:
Spresence+=re.split('\s+',m.group(1))
是一次性的,并没有在该代码中处理。这就是警告的内容。这是一个真正的积极因素。
集合类(>>>Spresence
['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '1', '0', '0', '1', '0', '0', '1', '0', '0', '1', '0', '0', '1', '0', '0', '1', '0', '0', '1', '0', '0', '1', '0', '0', '1', '0', '0', '1', '0', '0', '1', '0', '0', '1', '0', '0', '1', '0', '0', '2', '1', '1', '1', '0', '0', '3', '1', '1', '1', '0', '0', '4', '1', '1', '1', '0', '1', '2', '1', '1', '1', '0', '0']
)也没有被处理,但应该是。 Coverity应警告它。
到目前为止,我做的WMI很少,但似乎几乎所有东西都需要处理掉。一个令人讨厌的API。 Win32一闪而过。
如果这是一个抛弃计划,我根本不担心任何一个。否则,您可能需要处置。