我正在使用一个需要很长时间才能启动和初始化的开源 .NET 应用程序。它创建了数千个对象并将它们配置为首次使用。我正在尝试改进此启动时间。
有没有办法使用 Windows API 或类似工具捕获应用程序内存,然后在重启 PC 后快速“恢复”此状态?本质上是否有一种方法可以访问和保存 .NET 应用程序的底层内存并让 CLR 在以后“吸收”该内存?
最简单的方法是使用 Windows Hibernate 创建“hiberfile.sys”,然后保存此文件的副本(如果可能的话)。每次 Windows 启动时,您都会用保存的“干净”版本覆盖现有的休眠文件,以供下次启动。这确保您可以保存/恢复应用程序状态,而无需处理内存、指针和句柄。这行得通吗?
一种方法是创建存储盘,但我不知道是否可以恢复。 (实际上脱离 HDD 工作的虚拟内存,允许将内存保存/恢复为一个简单的文件)
类似于this问题,但有点不同,因为我不介意将应用程序内存重新插入到它保存的确切地址。PC 完全在我手中,为了简单起见,假设没有其他应用程序在运行。
C# 不支持 continuation开箱即用,尽管 .NET 3.0 和更高版本中的 Workflow Foundation 允许停止和重新启动工作流。我想知道应用程序如何作为工作流运行。
Raymond Chen 在 blog post 中对此提出异议。 ,但这里也没有太多技术数据。
YAPM ,开源进程监视器能够“显示/释放/更改保护/取消提交进程虚拟内存空间中的内存区域”。这可能与我所追求的类似吗?
最佳答案
如果您想要一个不变的保存/加载过程以避免首次使用,您可以查看serialization .
实际上节省内存是可能的,但是当您尝试恢复它时会遇到解决问题,并且您可能没有足够的内存,可能没有相同大小的空闲 block ,等等上。
对象级甚至一大组对象的序列化将允许您以几乎与转储内存相同的方式保存它们及其状态,但大大简化了加载过程并使其更加可靠。 .Net 提供了很好的序列化支持,并且可以输出到二进制文件(小但版本相关)或 XML(更大,人类可读,更灵活)。其他库可能会提供更多不同用途的方法(我相信有一个 JSON 库,它稍微更冗长,但适用于 Web 应用程序)。
根据您的应用程序的工作方式,您可能希望/能够在第一次运行时创建首次使用的模型,将它们序列化到磁盘,并从那时起加载它们。通过一些工作,还应该可以将所有对象(不同类型)添加到一个集合中并对其进行序列化,从而允许将所有数据存储在一个文件中。
所以是的,这是可能的,而且可能确实更快,尽管不是您最初的想法。
关于c# - 记录和恢复应用程序状态以快速启动 .NET 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9945106/
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/