有哪些提示可以减少.NET应用程序的内存使用量?考虑以下简单的C#程序.
class Program
{
static void Main(string[] args)
{
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
在x64的发布模式下编译并在Visual Studio外部运行,任务管理器报告以下内容:
Working Set: 9364k
Private Working Set: 2500k
Commit Size: 17480k
Run Code Online (Sandbox Code Playgroud)
如果它只为x86编译它会好一点:
Working Set: 5888k
Private Working Set: 1280k
Commit Size: 7012k
Run Code Online (Sandbox Code Playgroud)
然后,我尝试了以下程序,它执行相同但尝试在运行时初始化后修剪进程大小:
class Program
{
static void Main(string[] args)
{
minimizeMemory();
Console.ReadLine();
}
private static void minimizeMemory()
{
GC.Collect(GC.MaxGeneration);
GC.WaitForPendingFinalizers();
SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle,
(UIntPtr) 0xFFFFFFFF, (UIntPtr)0xFFFFFFFF);
}
[DllImport("kernel32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool SetProcessWorkingSetSize(IntPtr process,
UIntPtr minimumWorkingSetSize, UIntPtr maximumWorkingSetSize);
}
Run Code Online (Sandbox Code Playgroud)
在Visual Studio外部的 …
我注意到如果我为任何CPU/x64构建我的WPF应用程序,启动(大约20秒)或加载新控件需要花费的时间比在x86上启动(在发布和调试模式下) ,在VS的内部或外部.甚至最简单的WPF应用程序也会出现这种情况.在这个MSDN线程中讨论了这个问题,但没有提供答案.这只发生在.NET 4.0中 - 在3.5 SP1中,x64与x86一样快.有趣的是,微软似乎知道这个问题,因为VS2010中新的WPF项目的默认值是x86.
这是一个真正的错误还是我做错了?
编辑:可能与此相关:C#.NET 4.0中的慢速数据绑定设置时间.我正在大量使用数据绑定.
是否有可能在VS中制定解决方案依赖(即包括)整个其他解决方案?我见过一些关于"解决方案文件夹"的东西,但这些似乎并不是一回事......?谢谢!(顺便说一下,我正在使用VS 2008)
dependencies projects-and-solutions visual-studio-2008 visual-studio
有没有办法在python ElementTree中定义默认/未固定的命名空间?这似乎不起作用......
ns = {"":"http://maven.apache.org/POM/4.0.0"}
pom = xml.etree.ElementTree.parse("pom.xml")
print(pom.findall("version", ns))
Run Code Online (Sandbox Code Playgroud)
这也不是:
ns = {None:"http://maven.apache.org/POM/4.0.0"}
pom = xml.etree.ElementTree.parse("pom.xml")
print(pom.findall("version", ns))
Run Code Online (Sandbox Code Playgroud)
这样做,但后来我必须为每个元素添加前缀:
ns = {"mvn":"http://maven.apache.org/POM/4.0.0"}
pom = xml.etree.ElementTree.parse("pom.xml")
print(pom.findall("mvn:version", ns))
Run Code Online (Sandbox Code Playgroud)
在OSX上使用Python 3.5.
编辑:如果答案是"不",你仍然可以获得赏金:-).我只想要一个花费大量时间使用它的人明确的"不".
在C#/ .NET(在Windows上)有没有办法使用文件流读取"增长"文件?打开文件流时文件的长度将非常小,但该文件将由另一个线程写入.如果/当文件流"赶上"到另一个线程时(即Read()返回0字节读取时),我想暂停以允许文件缓冲一点,然后继续读取.
我真的不想使用a FilesystemWatcher并继续创建新的文件流(如日志文件所建议的那样),因为这不是一个日志文件(它是一个即时编码的视频文件),性能是个问题.
谢谢,
罗伯特
包装类很好,它们的目的也很好理解.但为什么我们省略原始类型?
就在前几天,我正在调查内存泄漏,该应用程序在两分钟内将应用程序从大约50MB膨胀到大约130MB.事实证明问题出在ConcurrentQueue类.在内部,该类存储数组的链接列表.当一个项目从ConcurrentQueue出队时,数组中的索引会被碰撞,但该项目仍保留在数组中(即它未设置为null).在足够的排队/出队之后,整个阵列节点被丢弃,因此从技术上讲它不是泄漏,但是如果在ConcurrentQueue中放置大对象,这可能会很快失控.文档没有记录这种危险.
我想知道基类库中还有其他潜在的内存缺陷吗?我知道Substring one(也就是说,如果你调用substring并保持结果,整个字符串仍将在内存中).你遇到过的其他人吗?
以树形式在DAG中布置顶点(即顶部没有内边的顶点,顶点仅依赖于下一层上的顶点等)是相当简单的,没有图形绘制算法,如Efficient Sugiyama.但是,是否有一个简单的算法可以最大限度地减少边缘交叉?(对于某些图形,可能无法完全消除边缘交叉.)图片说千言万语,所以有一种算法可以提示没有交叉边缘的东西.(与此相比).
我已经接受了Senthil的建议graphviz/dot - 快速浏览文档确认它很容易用作库或外部工具,并且输出格式非常容易解析.但是,我最终选择使用GraphSharp,因为我已经在使用.NET等(虽然它绝对没有dot那么强大).结果是"足够好",并且通过一点边缘路由和调整可以做得更好(模糊文本是因为3.5 WPF).
这是完整的 C#代码(这是引用QuickGraph或GraphSharp的所有代码 - 是的;就这么简单):
internal static class LayoutManager
{
private const string ALGORITHM_NAME = "EfficientSugiyama";
private const bool MINIMIZE_EDGE_LENGTH = true;
private const double VERTEX_DISTANCE = 25;
private const double LAYER_DISTANCE = 25;
private const double MIN_CANVAS_OFFSET = 20;
public static void doLayout(GraphCanvas canvas)
{
// TODO use a background thread
// TODO add comments
canvas.IsEnabled = false;
canvas.Cursor …Run Code Online (Sandbox Code Playgroud) 我们有一个代码样式检查器,它在每次签入之前运行,要求C#if语句的格式如下:
if (condition)
Run Code Online (Sandbox Code Playgroud)
但是,我的肌肉记忆已经开发用于打字:
if(condition)
Run Code Online (Sandbox Code Playgroud)
有没有办法让Visual Studio 2010自动插入该空间,如果我输入if而没有它?我知道你可以设置它,当你粘贴代码时,它会自动执行此操作,但不会在键入时.谢谢!
c# coding-style code-formatting visual-studio-2010 visual-studio
在Eclipse中,当我转到Maven Dependency Hierarchy页面时,我得到输出,指出导致版本被忽略的冲突:
但是,如果我使用dependency:tree,那就省略了,我只看到实际使用的evrsions:
| +- commons-httpclient:commons-httpclient:jar:3.1:compile
| +- commons-codec:commons-codec:jar:1.4:compile
| +- commons-io:commons-io:jar:2.4:compile
| +- commons-net:commons-net:jar:3.1:compile
| +- javax.servlet:servlet-api:jar:2.5:compile
Run Code Online (Sandbox Code Playgroud)
后来实际引用的版本......
+- commons-collections:commons-collections:jar:3.1:compile
Run Code Online (Sandbox Code Playgroud)
有没有办法获得依赖:树输出省略冲突的版本?
谢谢!
c# ×5
.net ×4
java ×2
wpf ×2
.net-4.0 ×1
64-bit ×1
algorithm ×1
coding-style ×1
dependencies ×1
eclipse ×1
elementtree ×1
filestream ×1
graph ×1
maven ×1
memory ×1
memory-leaks ×1
namespaces ×1
optimization ×1
performance ×1
pom.xml ×1
python ×1
python-3.x ×1
streaming ×1
string ×1
windows ×1
xml ×1