标签: comobject

将“dynamic”关键字与 __ComObject 一起使用时,RuntimeBinder 中存在泄漏

有谁知道在 C# 中对 __ComObject 实例使用“dynamic”关键字时是否有办法防止 RuntimeBinder 中的内存泄漏?

我得到以下代码:

var t = Type.GetTypeFromCLSID(new Guid("BB06C0E4-D293-4f75-8A90-CB05B6477EEE"));
while (true)
{
    dynamic o = System.Activator.CreateInstance(t);
    Marshal.ReleaseComObject(o);
}
Run Code Online (Sandbox Code Playgroud)

这会泄漏 LocalVariableSymbol 类实例(以及来自 Microsoft.CSharp.RuntimeBinder.Semantics 命名空间的其他实例)。

将“动态”替换为“对象”,即:

    object o = System.Activator.CreateInstance(t);
Run Code Online (Sandbox Code Playgroud)

修复了泄漏,但我更愿意继续使用动态(实际代码要复杂得多并且使用“动态”)。

我知道 RuntimeBinder 单例会缓存数据,这会导致泄漏,但您知道是否有任何方法可以清理缓存等?

非常感谢!


类似问题:

相关链接:

c# memory-leaks dynamic comobject

5
推荐指数
1
解决办法
2471
查看次数

VirtualBox + Powershell?

我创建了一个虚拟机.现在我尝试使用Powershell启动它.我已经在互联网上搜索了有关如何做到这一点的任何细节.这是我发现的唯一代码......

#----------------------
$vBox = New-Object -ComObject VirtualBox.VirtualBox
$vBox | Get-Member *

$vBox.Machines

$vBox.CreateMachine()
#----------------------
Run Code Online (Sandbox Code Playgroud)

(来源:http://www.ravichaganti.com/blog/? p = 1275)

实际上,我无法在virtualbox.org上找到有关com对象的任何文档.我对powershell非常擅长,我花了一些时间来探索com对象...

$vBox | gm
Run Code Online (Sandbox Code Playgroud)

我尝试了所有我能想到但却只收到错误的东西.我的问题是如何使用Powershell启动我的VM

谢谢

powershell virtualbox comobject

3
推荐指数
1
解决办法
7366
查看次数

如何从PowerShell中的字符串中删除所有换行符?

这是我用来解析我的电子邮件的代码.如果它们与特定日期匹配,我想将它们添加到其他电子邮件列表中,然后将其转换为平面文件:

outfile = "C:\Temp\emails.csv"
$olFolderInbox = 6
$ol = new-object -comobject "Outlook.Application"
$mapi = $ol.getnamespace("mapi")
$inbox = $mapi.GetDefaultFolder($olFolderInbox)
$msgs = $inbox.Folders.Item("root")
$list1 = @()
foreach($message in ($msgs.items))
{
    if($message.ReceivedTime -gt $(get-date).adddays(-14))
    {
        $list1 += "$($message.Subject);$($message.ReceivedTime);$($message.Body.Replace("`n",", "))"
    }
}
if(Test-Path $outfile)
{
    Remove-Item $outfile
    Add-Content $outfile $list1
}
else
{
    Add-Content $outfile $list1
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,替换语句on $message.Body.Replace("`n",", ")实际上并没有删除换行符,并且文件没有得到适当的创建.有没有办法确认身体部分的全部内容变成一条线?

我已经确认$message.body对象是一个字符串,所以我不确定为什么这不起作用.

powershell outlook parsing comobject powershell-2.0

2
推荐指数
2
解决办法
6万
查看次数

MSHTML HTMLHeadElementClass COM错误

我目前正在使用MS HTML将JavaScript代码插入到网站中.

我引用了Microsoft HTML Object Library并输入了这段代码.

IHTMLDocument2 doc = BrowserHost.Document as HTMLDocumentClass;
IHTMLElement head = (IHTMLElement)
      ((IHTMLElementCollection)doc.all.tags("head")).item(null, 0);
IHTMLScriptElement scriptObject = 
      (IHTMLScriptElement)doc.createElement("script");
scriptObject.type = @"text/javascript";
scriptObject.text = TTS.TTSWebFactory.GetJavascript();
((HTMLHeadElementClass)head).appendChild((IHTMLDOMNode)scriptObject);
Run Code Online (Sandbox Code Playgroud)

我在脚本的最后一行收到错误,这是消息.

Unable to cast COM object of type 'System._ComObject' to class type 
'mshtml.HTMLHeadElementClass'. COM components that enter the CLR and do not 
support IProvideClassInfo or that do not havae any iterop assembly registered 
will be wrapped in the _ComObject type. Instances of this type cannot be cast 
to any other class; …
Run Code Online (Sandbox Code Playgroud)

c# com mshtml comobject

1
推荐指数
1
解决办法
4272
查看次数