Articles of .net

什么时候由.NET进程分配的内存被释放回Windows

安装程序 .NET为分段的每一代堆(0,1,2,LOH)分配内存,以便在启动时获得连续的内存块,并在收集之后尝试满足分配请求。 这个分配给每个堆的内存可能会随着应用程序“升温”而平稳下来,除了第2代和大对象堆以外。 在垃圾收集期间,每个堆(0,1,2)都被扫描和压缩,除了刚刚扫过的大对象堆(LOH)之外。 我理解集合的“扫描”部分意味着GC确定哪些对象不再是根源,并且可用于收集(或定稿),而“紧凑”意味着在堆中仍然活着的地址被重新组织可用的剩余堆有更多可用的连续内存。 由于超过了堆中每个段的预算,.NET将分配另一个段来完成分配(如果可能的话)。 问题 我的问题归结为每个堆中的内存会发生什么情况,而不是由应用程序 (提交)使用,但仍保留.NET? 什么时候释放回操作系统? 。 我相信这是一个过程可能会消耗大量内存的情况(虚拟大小非常大,但是私有字节很小),但是在检查其堆时大部分是可用空间 。 另外需要注意的是,堆的总大小也可能相当小 ,并且不考虑进程消耗的内存。 没有阻塞的终结器,所有看起来都很健康的进程 – 它可能已经运行了几个星期,然后触发监视器警报(例如)。 尝试进一步澄清问题,如果您阅读了Tess .NET内存pipe理 – 餐厅类比 ,如果表是堆段,那么餐厅是否会丢失表(例如,免费的堆段)? 编辑 删除了工作组和鸡只的混淆参考 添加了对Tess餐厅类比的参考

File.Exists对不存在的文件返回true

我正在一个应用程序保存Path.GetDirectoryName(FilePath)中的文件,其中FilePath = Application.ExecutablePath包含一些有关授权的信息。 如果我从VS运行程序,它的工作正常,但如果我做一个安装程序并安装,然后运行它,程序认为该文件已经存在。 我改变了我的程序显示在一个消息框我的FilePath和是否File.Exists(FilePath)返回true或false 。 所以我看了看那条路,启用了隐藏和系统文件,F5'd几次,什么也没有。 该文件不存在,但File.Exists(FilePath)返回true。 任何想法为什么冷这发生,我怎么能解决它? 我正在使用Windows Vista,Visual Studio 2010,C#,并使用VS的安装项目创build了我的安装程序。 编辑:我的path是: C:\ Program Files(x86)\ Helium \ License.xml 。 这是我的代码的一部分: MessageBox.Show("LicenseFileName: " + LicenseFileName); // LicenseFileName: C:\Program Files (x86)\Helium\License.xml System.Diagnostics.Process.Start(LicenseFileName); // Nothing happens MessageBox.Show("File.Exists(LicenseFileName): " + File.Exists(LicenseFileName)); // File.Exists(LicenseFileName): true 忘了说,我已经安装了应用程序之前,所以文件曾经存在。 我使用控制面板卸载。

在Windows资源pipe理器中显示自定义标题或列

我的应用程序添加一些自定义元数据文件 我想要像这样在Windows资源pipe理器中显示它: 或这个: 有没有办法在.NET中做到这一点?

调整窗口大小会导致黑条

我有一个窗体,它在构造函数中设置这些样式: this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); this.SetStyle(ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.ResizeRedraw, true); this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); 我在Paint事件中绘制了一些矩形。 表单上没有控件。 Hovewer,当我调整表格的大小时,表格的右下方有黑条。 有什么办法摆脱他们? 我已经尝试了一切,在WndProc监听WM_ERASEBKGND ,手动绘制WM_PAINT上的窗体,实现自定义双缓冲区等。还有什么我可以尝试? 我发现这个: https : //connect.microsoft.com/VisualStudio/feedback/details/522441/custom-resizing-of-system-windows-window-flickers ,它看起来像是DWM中的错误,但我只是希望我能做一些解决方法。 请注意,我必须使用双缓冲,因为我想在Paint事件中绘制相当强烈的graphics表示。 我在C#.NET 2.0,Win7中开发。 状态更新1 我设法通过自己实现resizefunction来摆脱大部分黑色条纹。 Hovewer还有一些小毛病。 有没有办法一次resize和paint操作? 这里是我需要做的一个伪代码 : IntPtr hDC; var size = new Size(250, 200); IntPtr handle = API.PaintAndResizeBegin(this.Handle /* Form.Handle */, size.Width, size.Height, out hDC); using (var g = Graphics.FromHdc(hDC)) { this.backBuffer.Render(g, […]

在确定菜单项目的位置时是否有任何标准要遵循?

在开发基于Windows表单的应用程序时,在devise表单的主菜单系统时是否有任何标准? 大多数带有菜单系统的Windows应用程序都将具有标准的File | 编辑| 查看| 工具| 帮助菜单。 你如何确定任何额外的顶级菜单项的位置? 另外,你如何确定子菜单项的位置? 例如,您要遵循什么规则或原则来确定项目是否应放置在“编辑”,“工具”或可能是您自己的非标准顶级菜单中? 我在这里寻找两件事情: 发布的资源(网页或打印),详细说明这个(特别是如果它来自微软),或从UX或UI专业人士的其他材料。 你自己的意见。 基于Gamecat提到Ribbon的响应,我将把它扩展到Ribbon。 你如何确定哪个button出现? 寻找如上所述。 相关问题: https : //stackoverflow.com/questions/126797/is-there-a-style-guide-for-guis-somewhere

如何在Windows中运行应用程序?

如何获得Windows中当前正在运行的应用程序或前台进程的列表? 我的意思是有真正的窗口的应用程序。 不是后台服务/进程。 我想访问任务pipe理器打开时显示的同一个列表。 有没有办法? 任何types的解决scheme都可以接受 无论是一个命令或.NET代码或任何东西。 我只想以编程方式获取该列表。 这甚至可能吗? 我厌倦了任务列表,但它给了我所有的服务和stream程,甚至是后台服务。 有什么逻辑我可以实现?

PowerShell 2.0 sudo的限制

很长时间的读者,但新的海报。 我一直在为这个问题摔跤了一整天,这让我疯狂。 淘了这个网站和谷歌后,我仍然卡住了。 基本上,我无法弄清楚如何在PowerShell中使用Copy-Item CmdLet来实现“sudo”。 这是我的代码: PROFILE.PS1: # Trigger UAC to elevate the supplied command function Elevate-Process() { if($args.Length -eq 0) { error ('USAGE: ' + $MyInvocation.InvocationName + ' <executable> [arg1 arg2 arg3 …]'); } else { try { if($args.Length -eq 1) { Start-Process $args[0] -Verb RunAs; } else { Start-Process $args[0] -ArgumentList $args[1..$args.Length] -Verb […]

处理Windows USB事件

我创build了一个通用的USB HID通信驱动程序,能够监视USB事件并向设备发送/接收数据包。 自从我的WinForms日子以来,我一直在成功地使用它,因为很多代码都是从MSDN中挑选出来的,实现方式与此处build议的方式非常相似。 我的问题是:我看到的例子继续依赖于什么似乎是旧的“Windows消息”体系结构,即System.Runtime.InteropServices ,WM_xxxxxxxtypes的消息,注册/处理这些纯粹的C# WPF应用程序与HwndHandler ,重写WndProc等等。我想知道有没有办法处理USB事件使用更现代的,事件驱动的方法,与delegates说,订阅EventHandlers等? 即使这个 SOpostbuild议不要使用这种古老的方法,我想也必须有USB事件的解决scheme。 感谢名单。

如何在Windows 10邮件应用程序中使用附件打开新邮件

我正在尝试向我的C#/ .Net应用程序添加一个function,以便用户通过电子邮件发送文件。 当用户安装Outlook时,我可以成功地使用Outlook互操作API来完成我想要的function。 但是,在新的Windows 10安装,我不能解决如何打开一个电子邮件与默认的邮件应用程序,这是从Windows应用程序的附件。 我努力了: 使用EML文件,按照https://stackoverflow.com/a/25586282/2102158 邮件应用程序不注册自己打开EML文件 使用MAPI32.dll等(我使用的代码从https://github.com/metageek-llc/inSSIDer-2/blob/master/MetaScanner/UnhandledException/MapiMailMessage.cs ) popup一个对话框说没有电子邮件程序注册。 看来邮件应用程序不会与MAPI交互 使用mailto:链接。 邮件程序打开,但它不尊重Attachment =或Attach =参数 也 Windows.ApplicationModel.Email.EmailMessage似乎只在手机上可用。 我不想用SMTP来发送消息服务器端。 我也尝试了与邮件应用程序关联的MS-UNISTORE_EMAIL:和OUTLOOKMAIL:urlscheme,它们似乎与mailto的行为相同: 似乎没有任何方法从命令行启动邮件应用程序

检测Windows重新启动是否由于Windows更新

我的电脑上的一些应用程序已经进行了检测,重新启动是否由Windows Update完成。 这是可观察到的,因为它们在自动Windows Update重新启动后重新启动。 这是非常有用的,因为这些应用程序重新加载更改,甚至未保存的更改或恢复选项卡(浏览器的情况下)。 这样做的应用程序的例子: 谷歌浏览器 Microsoft Visual Studio 微软油漆 在所有情况下,应用程序保存重启之前的状态 。 (我的电脑实际上是从待机状态自动唤醒的,并且在安装更新的时候重新启动了自己,太糟糕了,这样做不会回到待机状态。) 我的问题是:如何以编程方式检测这种重新启动? 在重新启动之前似乎是可靠检测到的。 问题我怎么才能得到Windows最后一次重启的原因可能看起来像重复,但没有答案说任何更新。 我用C#编写代码,所以在C#中的答案会很有帮助,但是我也可以读C和C ++。