В одном из нашего программного обеспечения мы создаем записи и храним их в двоичном файле. После того как операция записи завершается, мы читаем назад этот двоичный файл. Проблема - то, если этот двоичный файл составляет меньше чем 100 МБ затем, его производительность достаточно хороша, но после того как этот файл растет, его производительность поражена.
Так, я думал о разделении этого большого двоичного файла (> 100 МБ) в меньшие (<100 МБ). Но кажется, что это решение не получает производительность. Так, я просто думал, каков может быть лучший подход для обработки этого сценария?
Это будет действительно большая справка от Вас парни для комментария этого.
Спасибо
Для этого можно использовать модуль win32gui. Сначала нужно получить действительный дескриптор на окне. Можно использовать win32gui.FindWindow
, если известно имя класса окна или точное название. В противном случае можно перечислить окна с помощью win32gui.EnumWindows
и попытаться найти нужное.
После получения дескриптора его можно вызвать win32gui.SetForegroundWindow
. Оно активирует окно и будет готово для нажатия клавиш.
См. пример ниже. Я надеюсь, что это поможет
import win32gui
import re
class WindowMgr:
"""Encapsulates some calls to the winapi for window management"""
def __init__ (self):
"""Constructor"""
self._handle = None
def find_window(self, class_name, window_name=None):
"""find a window by its class_name"""
self._handle = win32gui.FindWindow(class_name, window_name)
def _window_enum_callback(self, hwnd, wildcard):
"""Pass to win32gui.EnumWindows() to check all the opened windows"""
if re.match(wildcard, str(win32gui.GetWindowText(hwnd))) is not None:
self._handle = hwnd
def find_window_wildcard(self, wildcard):
"""find a window whose title matches the wildcard regex"""
self._handle = None
win32gui.EnumWindows(self._window_enum_callback, wildcard)
def set_foreground(self):
"""put the window in the foreground"""
win32gui.SetForegroundWindow(self._handle)
w = WindowMgr()
w.find_window_wildcard(".*Hello.*")
w.set_foreground()
-121--1719108- Если вы посмотрите примеры кода CUDA SDK, они имеют внешний C определяет, что ссылки функции, скомпилированные из файлов .cu. Таким образом, файлы .cu компилируются nvcc и связываются только с основной программой, в то время как файлы .cpp компилируются нормально.
Например, в marchingCubes_kernel.cu имеет функцию body:
extern "C" void
launch_classifyVoxel( dim3 grid, dim3 threads, uint* voxelVerts, uint *voxelOccupied, uchar *volume,
uint3 gridSize, uint3 gridSizeShift, uint3 gridSizeMask, uint numVoxels,
float3 voxelSize, float isoValue)
{
// calculate number of vertices need per voxel
classifyVoxel<<<grid, threads>>>(voxelVerts, voxelOccupied, volume,
gridSize, gridSizeShift, gridSizeMask,
numVoxels, voxelSize, isoValue);
cutilCheckMsg("classifyVoxel failed");
}
В то время как в maringCubes.cpp (где main () находится) просто имеет определение:
extern "C" void
launch_classifyVoxel( dim3 grid, dim3 threads, uint* voxelVerts, uint *voxelOccupied, uchar *volume,
uint3 gridSize, uint3 gridSizeShift, uint3 gridSizeMask, uint numVoxels,
float3 voxelSize, float isoValue);
Вы можете поместить их в файл .h тоже.
-121--2708683-Возможно, вместо этого можно попробовать использовать базу данных Sqlite .
Я исправил эту ошибку, изменив следующее включить тег как одну теговую версию.
Раньше:
<jsp:include page="..."></jsp:include>
Я изменился так,
<jsp:include page="..."/>
Теперь я не получил этот тип исключения.
-121--3464961-Всегда вполне сложно предоставить точные ответы только с проблемой системы, но вы фактически пытались проверить фактическую пропускную способность?
как первое решение, я бы просто Рекомендую использовать выделенный диск (так что нет одновременных действий чтения / записи от других процессов), а на это. Таким образом, это было бы только некоторую стоимость аппаратного обновления, и все мы знаем, что оборудование обычно дешевле, что программное обеспечение;) Вы можете даже перейти на RAID-контроллер для максимизации пропускной способности.
Если вы все еще ограничены пропускной способностью диска, есть новые технологии, использующие там технологии Flash: USB-ключей (хотя это может показаться не очень профессиональным), или «новые» твердотельные накопители могут обеспечить большее, чем механический диск.
Теперь, если подход дисков недостаточно быстры, или вы не можете получить руки на хороших SSD, у вас есть другие решения, но они включают изменения программного обеспечения, и я предлагаю их от вершины моей шляпы.
Обратите внимание, что если чтение последовательно, я нахожу его более «естественным», чтобы попробовать подход «трубы» (ALA UNIX), чтобы два процесса выполнялись одновременно. В традиционной трубе данные могут не попасть на диск в конце концов.
Стыдно, не так ли, что в этом возрасте подавляющей мощности обработки мы все еще борется с нашим диском IO?
Если ваше приложение читает, последовательное миграция данных до БД не поможет увеличить производительность. Если используется произвольный доступ, вы должны рассмотреть возможность перемещения данных в БД, особенно если используются разные показатели. Вы должны проверить, доступны ли доступны достаточно ли доступны достаточно ресурсов, если они загружены в комплектую памяти Virtual Memory Management Management может оказать влияние на производительность (обмен, пейджинг). В зависимости от вашей ОС установки предел для файла в буферах IO могут быть достигнуты. Сама файловая система может быть фрагментирована. Чтобы получить качественный ответ HIGER, вы должны предоставить информацию об оборудовании, ОС, памяти и файловой системе. И так, как ваш файл данных используется. Чем вы могли бы получить подсказки о настройке ядра и т. Д.
Так что же здесь за механизм поиска? Как ваше приложение узнает, в каком из меньших файлов искать запись? Если вы разделили большой файл, не реализовав какую-то форму поиска по ключу - индексацию, разметку - вы не решили проблему, а просто переупорядочили его.
Конечно, если вы реализовали некую форму индексирования, то вы начали строить свою собственную базу данных.
Не зная больше о Вашей заявке, было бы опрометчиво давать конкретные советы. Возможно, решением будет применение решения СУБД. Возможно, лучше было бы использовать NoSQL-подход. Возможно, вам понадобится текстовый механизм индексирования и поиска.
Итак...
Как часто вашему приложению нужно извлекать записи? Как оно решает, какие записи получать? Каково ваше определение плохой производительности? Почему вы (ваш проект) решили использовать плоские файлы, а не базу данных? О каких записях идет речь?