LINQPad是进行.NET开发的一款优秀工具,很是有利于Ignite.NET API的快速入门。html
下载LINQPad:linqpad.net/Download.aspx,注意要选择64位操做系统的AnyCPU版本;git
安装Ignite.NET的NuGet软件包:web
Query
-> References
和Properties
菜单项);Add NuGet…
,可能会出现警告:As you don't have LINQPad Premium/Developer Edition, you can only search for NuGet packages that include LINQPad samples.
,这是正常的,由于Ignite软件包确实包含LINQPad示例;Add To Query
按钮来安装软件包;Add namespaces
按钮,并(至少)添加第一个:Apache.Ignite.Core
;Query Properties
窗口上单击OK
;确认Language
下拉框设置为C# Expression
(默认设置);spring
输入Ignition.Start()
,而后按下F5。apache
Ignite节点启动后,就能够在输出面板中看到一般的控制台输出。缓存
在左侧的Samples
选项卡上能够看到打包的示例代码。网络
LINQPad在单独的进程中运行业务代码,该进程默认在屡次运行之间能够重复使用(出于性能缘由)。app
这有两个问题:工具
Ignition
类将全部启动的节点保留在静态映射中,该进程重用时,这些节点将保持运行,若是执行Ignition.Start()
两次,则会抛出Default Ignite instance has already been started.
这样的错误。该行为有时可能有用,但有时则不须要,可是幸亏能够经过内置的Util.NewProcess
属性来控制它。先将顶部的Language
下拉框切换到C# Statement(s)
模式,而后运行如下脚本:性能
Util.NewProcess = true; Ignition.Start();
该脚本屡次运行也不会出问题,由于每次都是从头开始的。
因为JVM启动和网络发现的过程,Ignite节点须要一些时间才能启动。为了在LINQPad中对代码快速迭代,能够在屡次运行之间重用已启动的节点。例以下面的代码重用启动的Ignite实例并重用现有的缓存,每次运行添加一条数据并显示现有的数据:
// Get existing instance or start a new one var ignite = Ignition.TryGetIgnite() ?? Ignition.Start(); // Get existing cache or create a new one var cache = ignite.GetOrCreateCache<Guid, DateTime>("cache"); // Add a new entry cache[Guid.NewGuid()] = DateTime.Now; // Show all entries cache.Dump();
与重启节点须要几秒钟的时间相反,此代码将在几毫秒内运行。
必要时能够经过Shift+Control+F5
卸载AppDomain
并从头开始。
除了简单讲解Ignite API以外,还建议关注下下面的Ignite + LINQPad使用场景:
检查现有的缓存
Visor命令行工具能够显示缓存的内容,可是在LINQPad中执行此操做更加灵活且友好,由于LINQPad脚本中没有任何实际的类,所以必须经过二进制模式才能读取缓存的内容。
如下代码显示了全部缓存的列表以及每一个缓存中的前5条数据:
var ignite = Ignition.TryGetIgnite() ?? Ignition.Start(); foreach (var cacheName in ignite.GetCacheNames()) ignite.GetCache<object, object>(cacheName) .WithKeepBinary<object, object>() .Select(x => x.ToString()) .Take(5) .Dump(cacheName);
将Spring XML配置转换为C# IgniteConfiguration
假设有一些Ignite Spring XML配置文件,而且须要对Ignite.NET也使用相同的配置,或者要从Ignite.NET 1.5迁移,该版本中Spring XML是惟一的配置机制。
具体上能够简单地使用上述Spring XML文件启动节点,而后调用GetConfiguration()
以查看其在.NET中对应的配置:
Ignition.Start(@"spring-config.xml").GetConfiguration()
将IgniteConfiguration转换为app.config XML
Ignite.NET支持app.config和web.config配置。可是编写XML并不高效,而在C#中使用IgniteConfiguration
则更容易一些,由于IDE会有很大的帮助,能够避免没法编译的无效代码。
为了配合使用XML,有一种将IgniteConfiguration
实例转换为XML表示形式的隐藏方法。如下代码显示了如何经过反射(早期版本)使用它(确认已将Language
下拉菜单设置为C#Program
):
void Main() { new IgniteConfiguration { CacheConfiguration = new[] { new CacheConfiguration { Name = "myCache", CacheMode = CacheMode.Replicated } } }.ToXml().Dump(); } public static class IgniteConfigurationExtensions { public static string ToXml(this IgniteConfiguration cfg) { var sb = new StringBuilder(); var settings = new XmlWriterSettings { Indent = true }; using (var xmlWriter = XmlWriter.Create(sb, settings)) { typeof(Ignition).Assembly .GetType("Apache.Ignite.Core.Impl.Common.IgniteConfigurationXmlSerializer") .GetMethod("Serialize") .Invoke(null, new object[] {cfg, xmlWriter, "igniteConfiguration"}); } return sb.ToString(); } }
结果是:
<?xml version="1.0" encoding="utf-16"?> <igniteConfiguration xmlns="http://ignite.apache.org/schema/dotnet/IgniteConfigurationSection"> <cacheConfiguration> <cacheConfiguration name="myCache" cacheMode="Replicated" /> </cacheConfiguration> </igniteConfiguration>
结合先前的Spring XML场景,还能够将Spring XML转换为app.config XML。
在最新的版本中,在开放API中还有ToXml
方法,会更方便。