我正在创建一个需要使用大量RAM的.NET应用程序(C#).我最近知道在32位版本的Windows XP上我只能使用2 GB,除非我使用/3Gb交换机,并IMAGE_FILE_LARGE_ADDRESS_AWARE在可执行标头中设置标志.但是因为我正在开发.NET应用程序,我想我无法直接修改可执行文件,是吗?那么,我该怎么做才能让我的应用程序使用3 GB?
我注意到List<T>它将枚举器定义为a struct,同时ArrayList将其枚举器定义为class.有什么不同?如果我要为我的班级写一个调查员,哪一个更好?
编辑:我的要求无法使用yield,所以我正在实现我自己的枚举器.也就是说,我想知道是否更好地遵循这些方法List<T>并将其作为结构实现.
我正在尝试用Java创建一个无锁队列实现,主要用于个人学习.队列应该是一般的,允许任意数量的读者和/或作者同时.
您能否回顾一下,并提出您发现的任何改进/问题?
谢谢.
import java.util.concurrent.atomic.AtomicReference;
public class LockFreeQueue<T> {
private static class Node<E> {
E value;
volatile Node<E> next;
Node(E value) {
this.value = value;
}
}
private AtomicReference<Node<T>> head, tail;
public LockFreeQueue() {
// have both head and tail point to a dummy node
Node<T> dummyNode = new Node<T>(null);
head = new AtomicReference<Node<T>>(dummyNode);
tail = new AtomicReference<Node<T>>(dummyNode);
}
/**
* Puts an object at the end of the queue.
*/
public void putObject(T value) {
Node<T> newNode = new …Run Code Online (Sandbox Code Playgroud) 我试图获取存储过程的返回值.以下是此类存储过程的示例:
select
Name,
IsEnabled
from
dbo.something
where
ID = @ID
if @@rowcount = 0
return 1
return
Run Code Online (Sandbox Code Playgroud)
这是一个简单的选择.如果找到0行,我的结果集将为null,但我仍然会有一个返回值.
这是一个糟糕的例子,因为这是一个选择,所以我确定我能找到返回0行.但是,在插入,删除或其他调用中,我们需要此返回值来了解是否存在问题.我一直无法找到获得此返回值的方法.我可以得到输出值,我可以得到结果集,但没有返回值.
如果我手动调用SQL,或者即使我SqlCommand使用实体框架运行,我也可以获得返回值,但这不是我想要做的.
有没有人能够使用Entity Framework从存储过程中获取返回值?
谢谢您的帮助!
我已经习惯通过引入编译错误来做一些重构.例如,如果我想从我的类中删除一个字段并使其成为某些方法的参数,我通常首先删除该字段,这会导致该类的编译错误.然后我会将参数引入我的方法,这将打破调用者.等等.这通常给我一种安全感.我还没有读过关于重构的任何书籍,但我曾经认为这是一种相对安全的方法.但我想知道,它真的安全吗?或者这是一种糟糕的做事方式?
我有一个类型的类ISimpleCache<IBrokeredDataObject>,我想在App.Config文件中添加为类型别名(然后是类型)
这条线
<typeAlias alias="ISimpleCacheOfIBrokeredDataObject" type="MyApplication.ISimpleCache<IBrokeredDataObject>, MyApplication" />
Run Code Online (Sandbox Code Playgroud)
由于<>显然是错误的,但我不相信逃避它们;
<typeAlias alias="ISimpleCacheOfIBrokeredDataObject" type="MyApplication.ISimpleCache<IBrokeredDataObject>, MyApplication" />
Run Code Online (Sandbox Code Playgroud)
也是正确的.
我目前正在将我的代码拆分为使用Unity,因此距离可编译的代码库太远而无法快速测试,并希望在此处得到一些确认.
我对编译器和JIT优化的内部结构并不是很了解,但我通常会尝试使用"常识"来猜测什么可以优化,什么不可以.所以我今天正在编写一个简单的单元测试方法:
@Test // [Test] in C#
public void testDefaultConstructor() {
new MyObject();
}
Run Code Online (Sandbox Code Playgroud)
这种方法实际上就是我所需要的.它检查默认构造函数是否存在并且运行时没有异常.
但后来我开始考虑编译器/ JIT优化的影响.编译器/ JIT可以通过new MyObject();完全消除语句来优化此方法吗?当然,需要确定调用图对其他对象没有副作用,这是普通构造函数的典型情况,它只是初始化对象的内部状态.
我假设只允许JIT执行这样的优化.这可能意味着它不是我应该担心的事情,因为测试方法只执行一次.我的假设是否正确?
然而,我正在考虑一般主题.当我想到如何防止这种方法被优化时,我想我可能assertTrue(new MyObject().toString() != null),但这非常依赖于该toString()方法的实际实现,即使这样,JIT也可以确定该toString()方法总是返回一个非空字符串(例如如果实际Object.toString()被调用),从而优化整个分支.所以这种方式不起作用.
我知道在C#中我可以使用[MethodImpl(MethodImplOptions.NoOptimization)],但这不是我真正想要的.我希望找到一种(语言无关的)方法来确保我的代码的某些特定部分实际上按照我的预期运行,而JIT不会干扰这个过程.
另外,在创建单元测试时,我应该注意哪些典型的优化案例?
非常感谢!
HTML5 Web Workers通常依赖于外部脚本importScripts().这些脚本应该放在Rails 4的哪个位置,以便它们按照资产管道正常缩小,但仍能正常工作?
使用需要解决的资产管道时存在一些问题:
vendor/assets默认情况下不由资产管道处理(在Rails 3中不是这种情况).app/assets,则需要将它们包含在内application.js以便进行处理.但是,工作文件不应包含在组合输出中(即application-[digest].js).new Worker('myWorker.js'),我们如何找到路径?(我试过asset_path,但它没有用).importScripts().我们如何找到加载的路径?是否存在类似于Microsoft的CHESS的 Java现有工具?或者CHESS源代码是否打开,以便我可以尝试将其转换为Java?
.net ×5
c# ×4
java ×3
app-config ×1
enumeration ×1
generics ×1
jit ×1
locking ×1
memory ×1
optimization ×1
refactoring ×1
sql ×1
windows ×1