文档章节

在LINQPad中使用Ignite.NET

李玉珏
 李玉珏
发布于 10/16 23:15
字数 1191
阅读 1753
收藏 1

LINQPad是进行.NET开发的一款优秀工具,非常有利于Ignite.NET API的快速入门。

入门

  1. 下载LINQPad:linqpad.net/Download.aspx,注意要选择64位操作系统的AnyCPU版本;

  2. 安装Ignite.NET的NuGet软件包:

    • 按F4(或点击Query -> ReferencesProperties菜单项);
    • 点击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
    • 关闭NuGet窗口,在Query Properties窗口上单击OK
  3. 确认Language下拉框设置为C# Expression(默认设置);

  4. 输入Ignition.Start(),然后按下F5。

Ignite节点启动后,就可以在输出面板中看到通常的控制台输出。

在左侧的Samples选项卡上可以看到打包的示例代码。

回收工作进程

LINQPad在单独的进程中运行业务代码,该进程默认在多次运行之间可以重复使用(出于性能原因)。

这有两个问题:

  1. Ignite.NET启动进程内JVM,该进程重用时,也会重用此JVM,因此无法修改JVM选项;
  2. 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方法,会更方便。

© 著作权归作者所有

李玉珏

李玉珏

粉丝 387
博文 79
码字总数 149758
作品 0
沈阳
架构师
私信 提问
LinqPad介绍,下载,用法说明

作者: 梅桦 发表于 2010-05-05 15:53 原文链接 阅读: 207 评论: 2 介绍一款用于Linq运算和测试的工具,LinqPad。我感觉这个工具非常优秀,不只是功能上优秀,在使用上也非常优秀,让我爱不释...

梅桦
2010/10/09
329
0
LinqToObject(1)——查询

作者: 梅桦 发表于 2010-05-06 16:03 原文链接 阅读: 84 评论: 0 LINQ,语言级集成查是Language INtegrated Query的意思,它是连接对象领域和数据领域的一座桥梁。可以通过C#,对各种数据源进...

梅桦
2010/10/09
197
0
.net 开发人员的十大必备工具之一

.net 开发人员的十大必备工具之一。 新版.Net开发必备十大工具 收藏 Snippet Compiler Snippet Compiler是一个基于 Windows 的小型应用程序,你可以通过它来编写、编译和运行代码。如果你具有...

黄双
2010/07/23
1K
3
.NET开发者必备的19个开发工具

1, Open Source - Sharp Develop SharpDevelop是一款基于微软.NET平台的C#,VB.NET以及Boo projects的IDE。不过它可是开源的,你可以从他们官网下载到源码。 2, Storm Codeplex STORM 是一款免...

junwong
2012/09/07
6.3K
19
.Net 开发者必备的11款开发利器

现如今,技术发展十分迅猛,开发者只有通过不断的学习才能跟得上步伐。而为了便于学习和工作,涌现了很多优秀的开发工具用以帮助开发者提高工作效率。同 时,这些工具大都开源而且免费,性能...

鉴客
2012/04/24
4.2K
20

没有更多内容

加载失败,请刷新页面

加载更多

DDD(十)--仓储

1、引言 DDD中的Repository(仓储):协调领域和数据映射层,利用类似与集合的接口来访问领域对象。——《领域驱动设计-软件核心复杂性应对之道》 仓储是DDD中产生的概念,也就是说,如果应...

MrYuZixian
14分钟前
5
0
Jenkins的多种迁移方法

说明 Jenkins有时需要进行迁移,主目录会发生改变,本文主要讲解如何更改主目录。由于jenkins安装方式的不同,主目录也不一样。 本测试环境:Centos7.6 X64。注意:在更改主目录之前,请一定...

Elson
14分钟前
5
0
好程序员web前端教程分享前端javascript练习题三

好程序员web前端教程分享前端javascript练习题三,cookie 一周内免登录 样式代码: <form action=""> 姓名:<input type="text" id="usename"/><br /> 密码:<input type="text" i="mima"/>......

好程序员官网
33分钟前
5
0
Table 信息转成pojo属性

import com.google.common.base.CaseFormat;import java.sql.*;/** * @author: liyhu * @date: 2019/11/22 */public class TableToPojo { static String url="jdbc:mys......

暗中观察
今天
9
0
Access数据库-C#操作类

//Access数据库-C# 操作类 代码using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.OleDb;using System.Data;namespace XXX{......

芳缘
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部