在调试器中运行可视化C#项目时,由于2GB虚拟地址空间的碎片,我得到OutOfMemoryException,并且我们假设加载的dll可能是碎片的原因.
(有关更多信息,请参阅下面的问题开发历史)
嗨,我需要两个大的int数组加载到内存中,每个都有大约1.2亿个元素(~470MB),并且都在一个Visual C#项目中.
当我试图实例化第二个数组时,我得到一个OutOfMemoryException.
我确实有足够的总可用内存,在进行网络搜索之后,我认为我的问题是我的系统上没有足够大的连续空闲内存块.但! - 当我只在一个Visual C#实例中实例化一个数组,然后打开另一个Visual C#实例时,第二个实例可以实例化一个470MB的数组.(编辑以澄清:在上面的段落中,我的意思是在Visual C#的调试器中运行它)
任务管理器显示相应的内存使用量增加,就像您期望的那样.因此,整个系统上没有足够的连续内存块不是问题.然后我尝试运行一个编译的可执行文件,实例化两个数组也工作(内存使用1GB)
摘要:
Visual C#中的OutOfMemoryException使用两个大的int数组,但运行编译的exe工作(mem使用1GB)和两个单独的Visual C#实例能够为我的大数组找到两个足够大的连续内存块,但我需要一个Visual C#实例来能够提供记忆.
首先要特别感谢nobugz和Brian Rasmussen,我认为他们的预测是"过程中2GB虚拟地址空间的碎片化"是问题所在.
根据他们的建议,我使用VMMap和listdlls进行短暂的业余分析,得到:
*21个dll列为"独立"-exe.(工作和使用1GB内存的那个.)
*为vshost.exe版本列出的58个dll.(调试时运行的版本,抛出异常,仅使用500MB)
VMMap向我展示了调试器版本最大的可用内存块为262,175,167,155,108MB.
所以VMMap说没有连续的500MB块,根据有关空闲块的信息,我添加了~9个较小的int-arrays,这些内存使用量增加了超过1,2GB,实际上确实有效.
因此,我会说我们称之为"2GB虚拟地址空间碎片"有罪.
从listdll-output我创建了一个小的电子表格,其中十六进制数转换为十进制以检查dll之间的空闲区域,我确实找到了独立版本中间(21)dll的大空间,但不是vshost-debugger-version(58 dll文件).我并没有声称之间没有任何其他东西,我不确定我在那里做什么是有道理的,但它似乎与VMMaps分析一致,似乎单独的dll已经分裂了内存调试器版本.
因此,如果我能够减少调试器使用的dll数量,也许可以找到解决方案.
这可能吗?2.如果是,我该怎么做?
我想在两个命名的捕获组之间的特定位置插入一个美元符号.问题是这意味着两个紧跟在替换字符串中的美元符号之后会导致问题.
我如何使用Replace-method直接执行此操作?我只是通过添加一些临时垃圾找到了解决方法,我立即再次删除.
请参阅问题的代码:
// We want to add a dollar sign before a number and use named groups for capturing;
// varying parts of the strings are in brackets []
// [somebody] has [some-dollar-amount] in his [something]
string joeHas = "Joe has 500 in his wallet.";
string jackHas = "Jack has 500 in his pocket.";
string jimHas = "Jim has 740 in his bag.";
string jasonHas = "Jason has 900 in his car.";
Regex dollarInsertion = new Regex(@"(?<start>^.*? has )(?<end>\d+ …
Run Code Online (Sandbox Code Playgroud) 我想将c#开发的软件出售给最终用户,并且希望每年使用许可证.
我从来没有使用许可证,所以我完全不知道这一点,并且不想自己重新发明一切,而是花一些钱并使用商业许可解决方案.
在比较了很多不同的选项后,我想到尝试一下CryptoLicensing,但由于以下帖子我有点谨慎:
虽然我自己没有试过破解它,但我担心破解有点太容易了.我完全清楚,没有任何解决方案是100%安全的,但对于使用加密传感的任何东西来说,这几乎听起来像是一般性的破解.我认为我仍然需要将商业许可解决方案集成到我的软件中,并且可以根据我的集成方式使其更难或更容易破解.
(请不要讨论我是否应该使用许可证,或者年度费用选项是个好主意;-))
感谢所有花时间阅读本文的人.