我对SQL Server 2008 R2上的存储过程有一个非常奇怪的问题.有时,每个月大约一次,我有一个变得非常慢的过程,运行大约需要6秒而不是几毫秒.但是,如果我只是重新编译它,而不改变任何东西,它会再次快速运行.它不会发生在所有存储过程中,只有一个(服务器上有几百个).
我的猜测是sp编译时,它被缓存,每次调用它时都会重用这个缓存,并且这个缓存版本由于某种原因而被破坏.
我希望也许有些人已经遇到过这种问题,或者至少可以指出我正确的方向,比如SQL Server或IIS的哪些配置会影响存储过程缓存?
这是代码:
USE [MyBaseName]
GO
/****** Object: StoredProcedure [dbo].[Publication_getByCriteria] Script Date: 05/29/2013 12:11:07 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Publication_getByCriteria]
@id_sousTheme As int = null,
@id_theme As int = null,
@nbPubli As int = 1000000,
@bActuSite As bit = null,
@bActuPerso As bit = null,
@bActuNewsletter As bit = null,
@bActuChronique As bit = null,
@bActuVideo As bit = null,
@bActuVideoBuzz As bit = null,
@bActuOpportunite As bit = …Run Code Online (Sandbox Code Playgroud) 在调用我的一个gulp任务时,我得到了" FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory".
我在这个问题中发现我可以将参数传递给节点以增加默认的内存限制:node --max-old-space-size=2000 server.js.但是如何告诉gulp将参数传递给node.exe?这是我可以传递给gulp 的标志列表,我希望找到一个gulp在为任务启动它时传递给节点的标志.
导致问题的任务:
var gulp = require('gulp');
var imagemin = require('gulp-imagemin');
gulp.task('imagemin', function() {
var OUTPUT_FOLDER = '../Release_Prepared/';
var extensionsToOptimize = ['gif', 'jpeg', 'jpg', 'png', 'svg'];
var glob = [];
for(var i=0; extensionsToOptimize.length; i++){
glob.push(OUTPUT_FOLDER + '**/*.' + extensionsToOptimize[i]);
}
gulp.src(glob)
.pipe(imagemin({
verbose: true
}))
.pipe(gulp.dest(OUTPUT_FOLDER));
});
Run Code Online (Sandbox Code Playgroud) 我希望能够将列表绑定到列表框数据源,并且当列表被修改时,列表框的UI会自动更新.(Winforms不是ASP).这是一个示例:
private List<Foo> fooList = new List<Foo>();
private void Form1_Load(object sender, EventArgs e)
{
//Add first Foo in fooList
Foo foo1 = new Foo("bar1");
fooList.Add(foo1);
//Bind fooList to the listBox
listBox1.DataSource = fooList;
//I can see bar1 in the listbox as expected
}
private void button1_Click(object sender, EventArgs e)
{
//Add anthoter Foo in fooList
Foo foo2 = new Foo("bar2");
fooList.Add(foo2);
//I expect the listBox UI to be updated thanks to INotifyPropertyChanged, but it's not
}
class Foo : INotifyPropertyChanged …Run Code Online (Sandbox Code Playgroud) C# 6 引入了字符串插值和一种更短的方式来指定格式字符串。
IntPtr ptr = new IntPtr(0xff);
Console.WriteLine(ptr.ToString()); // 255
Console.WriteLine(ptr.ToString("x")); // ff
Console.WriteLine($"0x{ptr.ToString("x")}"); // 0xff
Console.WriteLine($"0x{ptr:x}"); //0x255
Run Code Online (Sandbox Code Playgroud)
为什么最后两行输出不同的结果?我错过了什么吗?
作为旁注,这里是dotnet core 中 IntPtr ToString()的源代码:
public unsafe String ToString(String format)
{
#if WIN32
return ((int)m_value).ToString(format, CultureInfo.InvariantCulture);
#else
return ((long)m_value).ToString(format, CultureInfo.InvariantCulture);
#endif
}
Run Code Online (Sandbox Code Playgroud) 我做了一个样本来澄清问题:
public class Worker extends SwingWorker<Integer, Integer> {
private GeneralUserInterface gui;
public Worker(GeneralUserInterface gui){
this.gui = gui;
}
@Override
protected Integer doInBackground() throws Exception {
int someResultToReturn = 10;
for(int i=0; i<100; i++){
Thread.sleep(50);//The Work
publish(i+1);//calls process, which updates GUI
}
return someResultToReturn;
}
@Override
protected void process(List<Integer> values) {
for (Integer val : values) {
gui.updateProgressBar(val);
}
}
}
private void jButtonDoWorkActionPerformed(java.awt.event.ActionEvent evt) {
Worker worker = new Worker(this);
worker.execute();
try {
int resultToGet = worker.get();//Obviously freezes the GUI …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序执行大量字符串操作,我注意到 jvm 内存使用率非常高,而我什至没有在内存中存储任何内容。
我制作了一个示例应用程序来演示该问题:我有一个带有一个按钮的简单 JFrame
private void buttonDoWorkActionPerformed(java.awt.event.ActionEvent evt) {
String randomString = "abc test garbagecollector";
ArrayList<String> results;
for(int i=0; i<100000; i++)
results = doNothing(randomString.split(" "));
results = null;//No effect
System.gc();//No effect
}
private static ArrayList<String> doNothing(String[] words) {
ArrayList<String> results = new ArrayList<String>();
for (String word : words)
results.add(word);
return results;
}
Run Code Online (Sandbox Code Playgroud)
如果运行此示例,JVM 会占用大约 50Mo 的内存,一旦您按下按钮,它将升至 150Mo,并且永远不会下降。编辑:我指的是Windows任务管理器中的“java.exe”进程。
显然,我做了很多临时字符串副本,但我希望一旦我丢失引用,它们就会被碳水化合物收集器释放。
编辑:也许不相关,但我尝试使用 java 1.6 32 位和 64 位版本。
如何序列化资源?
一个例证:
<?php
if ($_fileHandle = fopen('file.txt', 'a')) {
echo "fopen success <br />";
} else {
echo "fopen failed <br />";
}
var_dump($_fileHandle);//displays "resource(3, stream)"
$serializedResource = serialize($_fileHandle);
$unserializedResource = unserialize($serializedResource);
var_dump($unserializedResource);//displays "int 0"
?>
Run Code Online (Sandbox Code Playgroud)
如您所见,如果按照文档所述进行序列化/反序列化,则 fopen 返回的资源将丢失:
serialize() 处理所有类型,除了资源类型
我希望能够序列化资源以将其存储在会话中以使其在每个页面中可用。可能有另一种方式吗?
我有一个相当大的表,有 400 列和 100,000 行。当我选择所有列时,查询非常慢(~7500ms)。仅在 3 列上设置了主键。我不关心插入/更新的速度,这个表主要用于读取。我正在阅读有关聚集列存储索引如何完美满足我的要求并提高读取性能的信息。
所以我尝试使用聚集列存储索引,速度几乎相同(~7000ms)。我真的期望有更高的改进。我错过了什么吗?