我想尽可能多地收集有关.NET/CLR中API版本控制的信息,特别是API更改如何破坏客户端应用程序.首先,让我们定义一些术语:
API更改 - 类型的公开可见定义的更改,包括其任何公共成员.这包括更改类型和成员名称,更改类型的基本类型,从类型的已实现接口列表添加/删除接口,添加/删除成员(包括重载),更改成员可见性,重命名方法和类型参数,添加默认值对于方法参数,在类型和成员上添加/删除属性,以及在类型和成员上添加/删除泛型类型参数(我错过了什么吗?).这不包括成员团体的任何变化,或私人成员的任何变化(即我们不考虑反射).
二进制级别中断 - 一种API更改,导致针对旧版本API编译的客户端程序集可能无法加载新版本.示例:更改方法签名,即使它允许以与之前相同的方式调用(即:void返回类型/参数默认值重载).
源级别中断 - 一种API更改,导致编写现有代码以针对旧版本的API进行编译,可能无法使用新版本进行编译.然而,已经编译的客户端程序集像以前一样工作.示例:添加一个新的重载,这可能导致前一个明确的方法调用不明确.
源级安静语义更改 - 一种API更改导致编写的现有代码针对旧版API进行编译,从而悄然改变其语义,例如通过调用不同的方法.但是,代码应该继续编译而不会出现警告/错误,以前编译的程序集应该像以前一样工作.示例:在现有类上实现新接口,导致在重载解析期间选择不同的重载.
最终目标是尽可能地对尽可能多的破坏和静默语义API更改进行编目,并描述破坏的确切影响,以及哪些语言受其影响并且不受其影响.扩展后者:虽然一些变化普遍影响所有语言(例如,向接口添加新成员将破坏任何语言中该接口的实现),但有些需要非常特定的语言语义才能进入游戏以获得休息.这通常涉及方法重载,并且通常涉及与隐式类型转换有关的任何事情.似乎没有任何方法可以在这里定义"最小公分母",即使对于符合CLS的语言(即至少符合CLI规范中定义的"CLS使用者"规则的那些语言) - 尽管我会很感激,如果有人在这里纠正我错了 - 所以这必须按语言去语言.那些最感兴趣的东西自然就是开箱即用的.NET:C#,VB和F#; 但其他人,如IronPython,IronRuby,Delphi Prism等也是相关的.它的角落越多,它就越有趣 - 删除成员之类的东西是不言而喻的,但是例如方法重载,可选/默认参数,lambda类型推断和转换运算符之间的微妙交互可能会非常令人惊讶有时.
举几个例子来启动这个:
种类:源级休息
受影响的语言:C#,VB,F#
更改前的API:
public class Foo
{
public void Bar(IEnumerable x);
}
Run Code Online (Sandbox Code Playgroud)
更改后的API:
public class Foo
{
public void Bar(IEnumerable x);
public void Bar(ICloneable x);
}
Run Code Online (Sandbox Code Playgroud)
示例客户端代码在更改之前工作并在其之后中断:
new Foo().Bar(new int[0]);
Run Code Online (Sandbox Code Playgroud)
种类:源级休息.
受影响的语言:C#,VB
语言不受影响:F#
更改前的API:
public class Foo
{
public static implicit operator int ();
}
Run Code Online (Sandbox Code Playgroud)
更改后的API:
public class Foo
{
public static implicit operator int …Run Code Online (Sandbox Code Playgroud) 我在WIN SERVER 2008 R2 Enterprise 64 Bit上以2.53 Ghz(2 CPU)和8 GB RAM的单个生产服务器(虚拟)上托管7个网站.
Web服务器是IIS 7,所有网站都使用.NET Framework 4.0应用程序池.
我当前的内存使用量大约是8GB中的4.16 GB,w3wp.exe是消耗大部分内存使用量(此时约为1.6 GB)的最多进程,其次是使用(1.5 GB)sqlservr.exe.
我想要做的是知道7个网站中哪个网站消耗的内存最多,以便我可以看看.
我已经尝试了Process Explorer和资源监视器,但它只能显示w3wp.exe占用的内存量,而不是单个网站的使用量.
有没有办法让我能指出内存hogger?
我有一个问题,我无法通过网络上的研究找到任何答案.我在Node.js和Cassandra中处理Web应用程序.我目前正在研究通知系统,我必须比较两个uuids,以确保我不会向做出原始操作的人发送通知(这会激发通知).
问题是,当我比较两个应该是等于的uuids时,我总是得到一个假值.
以下是我目前正在处理的代码示例:
console.log('user_id :', user_id.user_id);
console.log("user id of the current user :", this.user_id);
console.log(user_id.user_id == this.user_id);
console.log(user_id.user_id === this.user_id);
Run Code Online (Sandbox Code Playgroud)
以下是结果的显示:
user_id : Uuid: 29f1227d-58dd-4ddb-b0fa-19b7fc02fbe8
user id of the current user : Uuid: 29f1227d-58dd-4ddb-b0fa-19b7fc02fbe8
false
false
user_id : Uuid: c8f9c196-2d63-4cf0-b388-f11bfb1a476b
user id of the current user : Uuid: 29f1227d-58dd-4ddb-b0fa-19b7fc02fbe8
false
false
Run Code Online (Sandbox Code Playgroud)
如你所见,第一个uuids应该是相同的.它们是使用nodejs cassandra驱动程序中的uuid库生成的.当我能够使用指定的uuid在我的Cassandra数据库上发出任何请求时,我不明白为什么我无法比较它们.
如果有人能帮助我,那将是一件非常愉快的事!
我们在Windows 7中使用JRE 7安装了Cassandra 2.0.6,我们更新了cassandra.yaml文件,如下所示:
data_file_directories:D:\ cassandra_data\data
commitlog_directory:D:\ cassandra_data\commitlog
saved_caches_directory:D:\ cassandra_data\saved_caches
当我们尝试启动cassandra服务器(D:\ cassabdra\bin\cassandra.bat)时,我们收到以下错误
启动Cassandra服务器
信息13:19:39,272记录已初始化
信息13:19:39,299从文件加载设置:/ D:/cassandra/conf/cassandra.yaml
错误13:19:39,540致命配置错误
org.apache.cassandra.exceptions. ConfigurationException:org.apache.cassandra.config中的org.apache.cassandra.config.YamlConfigurationLoader.loadConfig(YamlConfigurationLoader.java:100)org.apache.cassandra.config.DatabaseDescriptor.loadConfig(DatabaseDescriptor.java:135)中的yaml无效.DatabaseDescriptor.(DatabaseDescriptor.java:111)org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:153)org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:471)at org .apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:560)引发者:无法为标记构建java对象:yaml.org,2002:org.apache.cassandra.config.Config; exception =无法为JavaBean =org.apache.cassandra.config.Config@1cb839f创建property = data_file_directories; 没有为类[Ljava.lang.String找到单个参数构造函数; 在'reader',第10行,第1列:
cluster_name:'Test Cluster'
我通过 Datastax 驱动程序在 Cassandra 中存储一些数据,并且需要存储无符号 16 位和 32 位整数。对于无符号 16 位整数,我可以轻松地将它们存储为有符号 32 位整数,并根据需要进行转换。然而,对于无符号 64 位整数,我不知所措。我可以将它们存储为字符串并解析它们,也可以将它们存储为字节数组。我可以将它们存储为 64 位有符号整数,并执行与 64 位无符号整数之间的转换所需的位操作。
推荐的方式是什么?
我已经安装了“Apache Cassandra 3.9.0 的 DataStax 分发版”。打开 cassandra CQL shell 后,我运行了以下命令
Create keyspace KeyspaceName
with replicaton{'class':'simplestrategy','replication_factor': 1}
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:
Unable to find replication strategy class 'org.apache.cassandra.locator.simplestrategy'
Run Code Online (Sandbox Code Playgroud) cassandra ×4
.net ×2
api ×1
asp.net ×1
c# ×1
clr ×1
comparison ×1
datastax ×1
iis-7 ×1
memory-leaks ×1
node.js ×1
uuid ×1
versioning ×1
windows ×1